继承是创建新类的一种方式,目的就为了减少代码。表达了子类是父类的关系,比如狗是动物,教授是老师
一个类可以多个类继承,所有语言都是这样的
一个类可以继承多个父类 ,只有python支持多继承
子类可以找到父类,但是父类不知道自己几个子类的,毕竟你创建的时候才不会知道会有几个子类吧
子类只会和父类联系,彼此之间不联系
1 class A:pass # 父类,基类,超类 2 class B:pass # 父类,基类,超类 3 class A_son (A,B):pass # 子类 4 class AB_son(A,B):pass # 子类 5 print(A_son.__bases__) # 查看父类 6 # (<class '__main__.A'>, <class '__main__.B'>) 7 print(A.__bases__) # 没有父类的类默认属于 "object" 祖宗类 8 # (<class 'object'>,)
1 # 狗类 看门 2 # 鸟类 下蛋 3 # 动物,吃,喝,跑 4 # 5 6 class Animal: 7 def __init__(self): 8 print("执行 Animal__init__") 9 self.func() 10 def eat(self): 11 print("it's can eat") 12 def run(self): 13 print("it's can run") 14 def dirnk(self): 15 print("it's can drink") 16 def func(self): 17 print("Animal__init__.func") 18 class Dog(Animal): 19 def guard(self): 20 print("it's can guard") 21 def func(self): 22 print("Dog.func") 23 class brid(Animal): 24 def egg(self): 25 print("it's can egg")
人狗实例
1 class Animal: 2 def __init__(self,name,aggr,hp): 3 self.name = name 4 self.aggr = aggr 5 self.hp = hp 6 def eat(self): 7 print("%s吃药回血" %self.name) 8 self.hp += 100 9 class Dog(Animal): 10 def __init__(self,name,aggr,hp,kind): 11 Animal.__init__(self,name,aggr,hp) # 调用父类,要带上全部的参数 12 self.kind = kind # 派生属性 13 def bite(self, person): 14 person.hp -= self.aggr 15 def eat(self): # 狗吃药回血还能长牙 16 Animal.eat(self) # 吃药基础技能继续调用父类 17 self.teech = 2 # 长牙了 18 19 class Person(Animal): 20 def __init__(self,name,aggr,hp,sex,money): 21 Animal.__init__(self,name,aggr,hp) # 调用父类 22 self.sex = sex # 派生属性 23 self.money = money # 派生属性 24 def attact(self, dog): 25 dog.hp -= self.aggr 26 suyang = Dog("苏阳",1,1,"吉娃娃") 27 yangtuo = Person("羊驼",100,100,"天才",10000) 28 suyang.eat() # 苏阳吃药回血 29 print(suyang.hp) # 101 30 yangtuo.attact(suyang) 31 print(suyang.hp) # 1 32 suyang.eat() # 苏阳吃药回血 33 print(suyang.teech) # 2 # 狗独有的方法长牙
总结:
父类中没有的方法子类有,叫做派生方法
父类中没有的方法子属性,叫做派生属性
只要子类的对象调用,子类有一定用子类,子类没有才用父类,如果都没有,报错
如果还想用父类的,直接单独父类调用吧,
单独调用父类方法,记得自己传self参数
super().func 不需要自己传self了也可以实现 fulei.func的功能
1 lass Animal: 2 def __init__(self,name,aggr,hp): 3 self.name = name 4 self.aggr = aggr 5 self.hp = hp 6 def eat(self): 7 print("%s吃药回血" %self.name) 8 self.hp += 100 9 class Dog(Animal): 10 def __init__(self,name,aggr,hp,kind): 11 super().__init__(name,aggr,hp) # 另一种方法调用父类,更加简单一些,省略了类名,对象名 12 # 只在新式类中才有,python3中所有的类都是新式类 13 self.kind = kind # 派生属性 14 15 suyang = Dog("苏阳",1,1,"吉娃娃") 16 print(suyang.name) 17 super(Dog,suyang).eat() # super可以在外面调用父类的方法,不仅仅局限于子类中调用父类