1, 面向对象的三大特征: 继承,多态,封装
2: 定义一个类时, 括号里面的叫 ====> 父类,基类,超类 如: class Person(Animal):
括号外面的 ====> 子类,派生类. pass
父类的中__init__()方法中囊括了继承它的所有子类共同的属性,当然具体到子类中的对象也会有不同, 可以在自己的类中添加独有的属性
3
,
子类以子类实例化的对象,可以访问父类的任何方法或变量
类名可以访问父类中的所有内容
子类实例化的对象也可以访问父类中的所有内容
4: 只执行父类的方法:子类中不要定义与父类同名的方法
只执行子类的方法:在子类创建这个方法.
既要执行子类的方法,又要执行父类的方法
(1) 指名道姓的调用(用父类直接调用,与继承没有关系)
class Bird(Animal):
def __init__(self, name,sex,age,wing): ====> 起的是跳板传值的作用
方法一 Animal.__init__(self, name, sex, age) ====>通过父类加点加__init__()调用函数,注意括号内的参数,要挨个接受
方法二 super().__init__(name,sex,age) =====>也可以同过supre()加点加__init__专门调用父类函数中的属 self.wing = wing 理解:super() 得到的返回值是一个特殊对象,该对象调用时会自动传值给self,专门用来调用父类中的属性
b1 = Bird('鹦鹉','公',20,'绿翅膀') super()加点加父类函数, 可以调用父类函数方法
5:继承的进阶: 单继承====>继承一个父类 多继承======>继承多个父类
类的分类: 新式类: 凡是继承object类都是新式类 专属新式类的查询顺序 print(Cat.mro())
python3x 所有的类都是新式类,因为python3x中的类都默认继承object.
经典类:不继承object类都是经典类
python2x:(既有新式类,又有经典类) 所有的类默认都不继承object类,所有的类默认都是经典类.你可以让其继承object
累的查询顺序: 单继承: 新式类,经典类查询顺序一样.
多继承: (1)新式类: 遵循广度优先.
多继承的新式类 广度优先 : 一条路走到倒数第二级,判断,如果其他路能走到终点,则返回走另一条路.如果不能,则走到终点.
(2)经典类: 遵循深度优先.
深度优先 : 一条路走到底.
新式类广度优先理解图: