类的继承
继承的优点:
1,节省代码.
2,规范代码.
初识继承:
#执行方法的时候先在自己的类中找,没有再去父类中找
只执行本类的方法 #在本类中要有执行的方法
只执行父类的方法. #本类中不写这个方法,自动去找父类中的方法
既执行本类又执行父类的方法
1,父类名.方法名(参数)
2,super().方法名(参数(self自动传值,不用写self))
举例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | 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( '金蝉' ) |
单继承,多继承.
类:新式类,经典类.
单继承;
新式类经典类一样.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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类之后就是新式类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | 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 #以每一条路的第一位为头,后面的为尾 #判断第一条路的头在不在后面的尾里面 #如果在 #看另一条路的头在不在 #如果不在 #删除每一条路的这个字母 #添加到另一个列表中 #依次循环 #得到的那个新列表前面加上最后的那个子类名 #就是继承的顺序 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步