一、对象继承:
1.1 继承:
特点:
提高代码的重用性,减少了代码的冗余
父类是object的类 —— 新式类,在Python3版本之后都是新式类
类总是要调用init方法,如果我们不写,实际上就调用父类object的__init__方法了
继承中使用属性时,如果自己有 就用自己的,如果自己没有 就用父类的,如果父类也没有 就报错
继承思想:
对象 -->类 -->基类
基类 -继承-> 子类 -实例化-> 对象
1.2 单继承:
特点:
可以有效的帮我们提高代码的重用性
在子类和父类有同名方法的时候,默认只执行子类的方法
如果想要执行父类的方法,可以在子类的方法中通过父类的类名调用父类的方法
单继承示例:
#动物属性继承示例:
classAnimal(object):def __init__(self, name, kind):
self.name=name
self.kind=kinddefeat(self, food):print('%s eat %s' %(self.name, food))
猫的属性继承:class Cat(Animal): #派生属性
def __init__(self, name, kind, eyes_color):
self.eyes_color=eyes_color#super(Cat,self).__init__(name,kind) # 前面的类名和self可以忽略不写(方式一)
#super().__init__(name,kind) # self参数默认传参,不需要指定(方式二)
Animal.__init__(self, name, kind) #通过父类类名传参(方式三)
def climb(self): #派生方法
print('%s climb tree'%self.name)
狗的属性继承:class Dog(Animal):passhua= Cat('小花', '橘猫', '蓝色')print(hua.__dict__) #打印对象的属性字典
View Code
1.3 多重继承:
特点:
规范复杂的功能与功能之间的关系
在多继承中,super方法就只和mro顺序有关系,和父类子类没有关系
多重继承示例:
#多继承示例:
#各种动物,每一种动物都是一个类#青蛙、天鹅、老虎、鹦鹉#青蛙 :走,游泳#天鹅 :走,游泳,飞#老虎 :走,游泳#鹦鹉 :走,飞,说话
#定义飞禽类
classFlyAnimal:def fly(self):pass
#定义水生类
classSwimAnimal:def swim(self):pass
def eat():pass
#定义的走兽类
classWalkAnimal:def walk(self):pass
def eat():pass
#青蛙继承的类
class Frog(SwimAnimal,WalkAnimal): pass
#老虎继承的类
class Tiger(SwimAnimal,WalkAnimal):pass
#天鹅继承的类
class Swan(FlyAnimal,SwimAnimal,WalkAnimal):pass
#鹦鹉继承的类
classParrot(FlyAnimal,WalkAnimal):deftalk(self):pass
View Code
继承时如果出现多个和父类都有,那么用谁的?
1.4 多继承之钻石继承问题:
图例: 广度优先
钻石继承示例:
#钻石继承示例:#遵循原则: 广度优先(C3算法)
classA(object):deffunc(self):print('a')classB(A):pass
#def func(self):
#print('b')
classC(A):pass
#def func(self):
#print('c')
classD(B,C):pass
#def func(self):
#print('d')
d=D()
d.func()#d --> b --> c --> a
View Code
1.5 多重继承之乌龟继承问题:
图例:
乌龟继承示例: