day26 单继承

继承是创建新类的一种方式,目的就为了减少代码。表达了子类是父类的关系,比如狗是动物,教授是老师
一个类可以多个类继承,所有语言都是这样的
一个类可以继承多个父类 ,只有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可以在外面调用父类的方法,不仅仅局限于子类中调用父类
原文地址:https://www.cnblogs.com/shijieli/p/9915499.html