python,python什么是继承,什么是多态
目录
一、继承特点
1.什么是继承?
2.继承中子类和超类的概念
3.继承的作用
二。基本方法
1.检查继承的父class _bases_
2.方法的复制
3.super(父类)
6.__init__方法
7.派生属性
三。多重遗传
格式
继承原则(钻石继承)
四。抽象类
1.定义抽象类
2.定义抽象方法
一、传承特点1。什么是继承?继承是类之间的父子关系。子类可以拥有父类的静态属性和方法。
【继承意味着你可以在另一个类中获得静态属性和公共方法。(并非所有成员)]
在python中,新创建的类可以继承一个或多个父类,可以称为基类或超类,新创建的类称为派生类或子类。
注意:python中的继承分为单继承和多继承。
2.继承中的子类和父类的概念父类:用于继承的类,称为父类,也称为基类,或超类。
子类:继承其他类的类,称为子类,也称为派生类。
3.继承的作用是提高代码复用率。
继承的简单例子
二。基本方法1。检查继承的父class _bases_ Note:
(1)在。python 3,如果一个类不继承任何类,默认继承object类。我们称这个班级为新班级。
(2).对象类是python的祖先,所有的类都继承自对象类。
2.方法的复制子类定义了与父类相同的方法。我们称之为一种方法的复制(派生方法)。当实例调用此方法时,它将调用自己的类中的方法。
我们再举一个例子。
3.super(父类)子类拥有与父类相同的方法,如果子类希望调用与父类相同的方法。可以使用super()方法。
在python3中,当子类执行父类时,超级方法super()-也可以直接使用。
默认情况下,Super省略了两个参数。第一个参数是类名,第二个参数是self。两个参数可以省略不传递,比如super(Student,self)。
Super()也可以从类外部使用。它需要传递类名(这个类的名称)和对象名。
例如超级(学生,学生)
格式:
父类名,方法名(self)或super(),方法名()或super(类名,对象名)。
例如:
6._ _ init _ _ method-子类继承父类。如果子类不再编写父类的__init__()方法,
创建子类对象时,会自动调用父类__init__()方法。
-子类继承父类。如果子类检查父类的__init__()方法,
当创建的子类对象时,将不会再次调用父类的__init__()方法。
-注意:当需要查看父类的__init__()方法时,python需要调用父类的_ _ init _ _()方法。
因为存在隐患,比如父类的初始化方法有参数,子类的初始化没有参数,子类再调用父类。
7.派生属性的覆盖(derived attributes):子类也可以添加自己的新属性或者在自身中重新定义这些属性(不影响父类)。需要注意的是,一旦自己的属性被重新定义,并且与父类同名,那么在调用新添加的属性时,就会以自己的为准(override of attributes)。
3.多重继承一个子类可以继承多个父类,也就是多重继承,拥有所有父类的属性和方法。比如,一个孩子会遗传他父亲和母亲的特征。格式化子类名称(父类名1,父类名2…):通过
当我们同时继承两个父类时:
基本上,当我们继承同一个父方法时,系统应该如何选择?
我们先来看一个方法。
这样,当继承的类中的方法相同时,我们知道我们继承了谁。
我们应该尽量避免这种多重继承的发生,即多个继承的类有相同的函数或变量名。
继承原理(钻石继承)python到底是怎么实现继承的?对于您定义的每个类,Python将计算一个方法解析顺序(MRO)列表。这个MRO列表是所有基类的简单线性顺序列表,例如
为了实现继承,python将在MRO列表中从左到右搜索基类,直到找到匹配该属性的第一个类。
MRO列表是通过C3线性化算法构建的。这个算法的数学原理我们就不深究了。它实际上是合并所有父类的MRO列表,并遵循以下三个准则:
1.子类将在父类之前被检查。
2.将根据列表中的顺序检查多个父类
3.如果下一个类有两个合法的选择,选择第一个父类。
这样和我们的逻辑思维是不太同的
我们来举个例子
四。抽象类在我们定义Person类和实现eat()和drink()方法之前,
每个人都会在不同的地方吃喝,如果方法实现了就浪费了。因此,我们只能定义eat()方法,而不能实现方法体。在这种形式下,我们可以将方法定义为抽象方法,具有抽象方法的类称为抽象类。
抽象类是一个特殊的类,只能继承,不能实例化。抽象类中可以有抽象方法和普通方法。
1.定义抽象类。定义抽象类需要导入abc模块。从abc导入ABCMeta,abstractmethod
2.定义抽象方法。抽象方法:只定义方法,不具体实现方法体。
定义抽象方法时,需要在前面加上:@abstractmethod。
抽象方法不包含任何可实现的代码,所以其函数体通常使用pass。
注意:子类继承了抽象类父类,子类必须实现父类的抽象方法。
当你拥有它的时候。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。