
正文
python面向函数编程 python3 面向对象编程
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
Python面向对象编程之继承与多态详解
Python面向对象编程之继承与多态详解
本文实例讲述了Python面向对象编程之继承与多态。分享给大家供大家参考,具体如下:
Python 类的继承
在OOP(Object Oriented Programming)程序设计中,当我们定义一个class的时候,可以从某个现有的class 继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。
我们先来定义一个class Person,表示人,定义属性变量 name 及 sex (姓名和性别);
定义一个方法print_title():当sex是male时,print man;当sex 是female时,print woman。参考如下代码:
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex
def print_title(self):
if self.sex == "male":
print("man")
elif self.sex == "female":
print("woman")
class Child(Person): # Child 继承 Person
pass
May = Child("May","female")
Peter = Person("Peter","male")
print(May.name,May.sex,Peter.name,Peter.sex) # 子类继承父类方法及属性
May.print_title()
Peter.print_title()
而我们编写 Child 类,完全可以继承 Person 类(Child 就是 Person);使用 class subclass_name(baseclass_name) 来表示继承;
继承有什么好处?最大的好处是子类获得了父类的全部属性及功能。如下 Child 类就可以直接使用父类的 print_title() 方法
实例化Child的时候,子类继承了父类的构造函数,就需要提供父类Person要求的两个属性变量 name 及 sex:
在继承关系中,如果一个实例的数据类型是某个子类,那它也可以被看做是父类(May 既是 Child 又是 Person)。但是,反过来就不行(Peter 仅是 Person,而不是Child)。
继承还可以一级一级地继承下来,就好比从爷爷到爸爸、再到儿子这样的关系。而任何类,最终都可以追溯到根类object,这些继承关系看上去就像一颗倒着的树。比如如下的继承树:
isinstance() 及 issubclass()
Python 与其他语言不同点在于,当我们定义一个 class 的时候,我们实际上就定义了一种数据类型。我们定义的数据类型和Python自带的数据类型,比如str、list、dict没什么两样。
Python 有两个判断继承的函数:isinstance() 用于检查实例类型;issubclass() 用于检查类继承。参见下方示例:
class Person(object):
pass
class Child(Person): # Child 继承 Person
pass
May = Child()
Peter = Person()
print(isinstance(May,Child)) # True
print(isinstance(May,Person)) # True
print(isinstance(Peter,Child)) # False
print(isinstance(Peter,Person)) # True
print(issubclass(Child,Person)) # True
Python 类的多态
在说明多态是什么之前,我们在 Child 类中重写 print_title() 方法:若为male,print boy;若为female,print girl
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex
def print_title(self):
if self.sex == "male":
print("man")
elif self.sex == "female":
print("woman")
class Child(Person): # Child 继承 Person
def print_title(self):
if self.sex == "male":
print("boy")
elif self.sex == "female":
print("girl")
May = Child("May","female")
Peter = Person("Peter","male")
print(May.name,May.sex,Peter.name,Peter.sex)
May.print_title()
Peter.print_title()
当子类和父类都存在相同的 print_title()方法时,子类的 print_title() 覆盖了父类的 print_title(),在代码运行时,会调用子类的 print_title()
这样,我们就获得了继承的另一个好处:多态。
多态的好处就是,当我们需要传入更多的子类,例如新增 Teenagers、Grownups 等时,我们只需要继承 Person 类型就可以了,而print_title()方法既可以直不重写(即使用Person的),也可以重写一个特有的。这就是多态的意思。调用方只管调用,不管细节,而当我们新增一种Person的子类时,只要确保新方法编写正确,而不用管原来的代码。这就是著名的“开闭”原则:
对扩展开放(Open for extension):允许子类重写方法函数
对修改封闭(Closed for modification):不重写,直接继承父类方法函数
子类重写构造函数
子类可以没有构造函数,表示同父类构造一致;子类也可重写构造函数;现在,我们需要在子类 Child 中新增两个属性变量:mother 和 father,我们可以构造如下(建议子类调用父类的构造方法,参见后续代码):
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex
class Child(Person): # Child 继承 Person
def __init__(self,name,sex,mother,father):
self.name = name
self.sex = sex
self.mother = mother
self.father = father
May = Child("May","female","April","June")
print(May.name,May.sex,May.mother,May.father)
若父类构造函数包含很多属性,子类仅需新增1、2个,会有不少冗余的代码,这边,子类可对父类的构造方法进行调用,参考如下:
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex
class Child(Person): # Child 继承 Person
def __init__(self,name,sex,mother,father):
Person.__init__(self,name,sex) # 子类对父类的构造方法的调用
self.mother = mother
self.father = father
May = Child("May","female","April","June")
print(May.name,May.sex,May.mother,May.father)
多重继承
多重继承的概念应该比较好理解,比如现在需要新建一个类 baby 继承 Child , 可继承父类及父类上层类的属性及方法,优先使用层类近的方法,代码参考如下:
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex
def print_title(self):
if self.sex == "male":
print("man")
elif self.sex == "female":
print("woman")
class Child(Person):
pass
class Baby(Child):
pass
May = Baby("May","female") # 继承上上层父类的属性
print(May.name,May.sex)
May.print_title() # 可使用上上层父类的方法
class Child(Person):
def print_title(self):
if self.sex == "male":
print("boy")
elif self.sex == "female":
print("girl")
class Baby(Child):
pass
May = Baby("May","female")
May.print_title() # 优先使用上层类的方法
相关问答
Q1: python是面向什么的高级语言?
面相对象、解释型。
Python支持多种编程范型,包括函数式、指令式、反射式、结构化和面向对象编程。它拥有动态类型系统和垃圾回收功能,能够自动管理内存使用,并且其本身拥有一个巨大而广泛python面向函数编程的标准库。它的语言结构以及面向对象的方法旨在帮助程序员为小型的和大型的项目编写清晰的、合乎逻辑的代码。
吉多·范罗苏姆于1980年代后期开始研发Python,它是作为ABC语言的后继者,也可以视之为使用叫做的M-表达式的一种传统中缀表示法的LISP方言。
吉多·范罗苏姆于1991年首次发布 Python 0.9.0。Python2.0于2000 年发布并引入python面向函数编程了新功能。Python3.0于2008年发布,是该语言的主要修订版,并非完全向后兼容。 Python2于2020年随2.7.18版停止使用。
Python的设计哲学强调代码的可读性和简洁的语法,尤其是使用空格缩进划分代码块。相比于C或Java,Python让开发者能够用更少的代码表达想法。
Python解释器本身几乎可以在所有的操作系统中运行。Python的官方解释器CPython是用C语言编写的,它是一个由社群驱动的自由软件,目前由Python软件基金会管理。
特征
Python是多范型编程语言。它完全支持结构化编程和面向对象编程,还有很多特征支持函数式编程和元编程比如元对象协议(元类和魔术方法)。
通过扩展还可以支持很多范型,包括面向切面编程、契约式设计和逻辑编程。
Python使用动态类型,在内存管理上采用引用计数和环检测相结合的垃圾收集器。它的特征还有动态名字解析(后期绑定),即在程序执行期间绑定方法和变量的名字。
Python对遵循LISP传统的函数式编程提供了有限的支持,它提供了 map、filter和reduce函数;列表推导式、字典、集合和生成器表达式。
Q2: python的特性是什么?
Python是一门大家都比较熟悉的一门计算机语言,也是比较简单的一门计算机语言,相对于来说更加简单一些,而且也是不少人进入行业内的首要选择。
Python是一门好用又简单易学的计算机编程语言,在近几年中,Python受到了不少IT人士的追捧,热度也是越来越高了,成为了我们入门首选的编程语言,为什么呢?因为Python具有非常广泛的应用范围,在人工智能、web开发之中具有非常好的应用,同时在金融分析、爬虫等领域也具有很大的作用。
1、Python采用C语言进行开发,但是Python不再有C语言中的指针等复杂的数据类型存在。
2、Python具有很强的面向对象特性,同时也简单化了面向对象的实现,可以消除保护类型、抽象类、接口等面向对象的元素。
3、Python代码可以使用空格或者制表符缩进的方式分割代码。
4、Python仅仅只有31个保留字,而且没有分号、begin、end等标记。
5、Python是强类型的语言,变量创建之后会对应一种数据类型,出现在统一表达式中的不同类型的变量需要做类型转换。
Q3: python语言是面向过程的吗
Python语言有面向过程、面向对象、面向函数三种模式,面向过程只是其中一种。
Q4: 简述python语言的特点
Python语言python面向函数编程的特点:
1、简单易学:Python是一种代表简单主义思想的编程语言,阅读一个良好的Python程序的时候就犹如在读英语一样。Python最大的优势就是伪代码的本质,在开发的时候主要以解决问题为主要,并不是搞明白语言的本身。
2、面向对象:Python既是面向对象的编程,也是面向对象编程,与其python面向函数编程他主要的语言C++和Java对比来说,Python是以一种非常强大而且简单的方式来实现面向对象的编程。
3、可移植性:Python具有开源的本质,可以被移植在许多的平台上,比如说Lnux、Windows、 FreeBSD、 Macintosh、
Solaris、OS/2、Amiga、AROS、AS/400等,Python都可以很好的运行其中。
4、解释性:Python语言写的程序不需要编译成为二进制的代码,可以直接从源代码运行程序,在计算机内部,Python解释器将源代码转换称为字节码的中间形式,可以直接翻译运行。
5、开源:Python语言是开源的。简单的来说,python面向函数编程你可以自由发布这个软件的拷贝,阅读源代码,对它进行改动,用于新的自由软件之中。
6、高级语言:Python是高级编程语言,当使用Python进行编程的时候,无需考虑如何管理程序使用的内存一类的底层细节问题。
7、可扩展性:如果想要更快的运行,但是某些算法不公开,这个部分的程序可以选择用C语言进行编写,然后再Python程序中进行使用。
8、丰富的库:Python具有丰富强大的标准库,可以帮助python面向函数编程你处理各种工作,其中包含python面向函数编程了正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGl、FTP、电子邮件等,这些功能都是可以使用的,所以Python语言功能十分强大。
9、规范代码:在使用Python书写代码的时候采用强制缩进的方式让代码具有非常好的可读性。
python面向函数编程的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于python3 面向对象编程、python面向函数编程的信息别忘了在本站进行查找喔。






