类的继承
类的继承
继承的优点:
1,节省代码.
2,规范代码.
初识继承:
#执行方法的时候先在自己的类中找,没有再去父类中找
只执行本类的方法 #在本类中要有执行的方法
只执行父类的方法. #本类中不写这个方法,自动去找父类中的方法
既执行本类又执行父类的方法
1,父类名.方法名(参数)
2,super().方法名(参数(self自动传值,不用写self))
举例:
class Animal:
def __init__(self, name, sex, age): self.name = name self.sex = sex self.age = age def eat(self,a1): print('%s吃%s' % (self.name,a1)) def drink(self): print('%s喝东西' % (self.name))class Cat(Animal): def miaow(self): print('喵喵叫') # def eat(self): # 只执行自己类中的方法 # print(666)class Brid(Animal): def __init__(self, name,sex,age,wing): # self b1对象 name '鹦鹉',sex '公',age 20, wing '绿翅膀' ''' self=b1对象 name='鹦鹉' sex='公' age= 20, wing='绿翅膀' ''' #1, Animal.__init__(self, name, sex, age) #2, super().__init__(name,sex,age) # 相当于super(Brid,self).__init__(name,sex,age) self.wing = wing def bark (self): print('嗷嗷叫') def eat(self,argv): super().eat(argv) print('鸟吃虫子...')class Chook(Animal): def crow(self): print('大爷laiwanya')cat1 = Cat('tom','公', 3)cat1.eat()# 只执行父类的方法:子类中不要定义与父类同名的方法# 只执行子类的方法:在子类创建这个方法.# 既要执行子类的方法,又要执行父类的方法?# 有两种解决方法. # 1,Animal.__init__(self, name, sex, age) # 1,super().__init__(name,sex,age)# cat1 = Cat('tom','公', 3,)b1 = Brid('鹦鹉','公',20,'绿翅膀')# print(b1.__dict__)b1.eat('金蝉')单继承,多继承.
类:新式类,经典类.
单继承;
新式类经典类一样.
class A:
pass # def func(self): # print('IN A')class B(A): pass # def func(self): # print('IN B')class C(B): pass # def func(self): # print('IN C')c1 = C()c1.func()多继承: #python3中没有经典类,都是新式类,自动继承object类.
新式类:广度优先 类名.mro()#查询类的继承顺序
经典类:深度优先. #python2中才有经典类,继承object类之后就是新式类
新式类:广度优先 类名.mro()#查询类的继承顺序
经典类:深度优先. #python2中才有经典类,继承object类之后就是新式类
class A:
def func(self): print('IN A')class B(A): pass # def func(self): # print('IN B')class C(A): pass # def func(self): # print('IN C')class D(B): pass # def func(self): # print('IN D')class E(C): pass # def func(self): # print('IN E')class F(D,E): pass # def func(self): # print('IN F')f1 = F()f1.func()print(F.mro()) # 查询类的继承顺序#F,D,B,E,C,A#先写出所有路的继承顺序,D,B,A E,C,A在写出继承的顺序D,E#以每一条路的第一位为头,后面的为尾#判断第一条路的头在不在后面的尾里面#如果在#看另一条路的头在不在#如果不在#删除每一条路的这个字母#添加到另一个列表中#依次循环#得到的那个新列表前面加上最后的那个子类名#就是继承的顺序
浙公网安备 33010602011771号