#继承的语法#实际上在python中,任何类都有一个共同的父类叫objectclassPerson():
name ="None"
age =0defsleep(self):print("i am sleeping")classTeacher(Person):pass
A = Teacher()#继承了父类的所有属性print(A.name)print(Teacher.name)
A.sleep()
classPerson():
name ="None"
_age =0
__addr ="zhangjiakou"defsleep(self):print("i am sleeping")classTeacher(Person):
teacherID ="33317S153643"deftest(self):print("i am teacher")
A = Teacher()#继承了父类的所有属性print(A.name)#可以访问print(A._age)#可以访问#print(A.__addr) #不可访问print(A.teacherID)
A.test()
None
0
33317S153643
i am teacher
classPerson():
name ="lizi"classTeacher(Person):
name ="llll"
A = Teacher()print(A.name)#子类和父类重名使用就近原则
llll
继承变量函数的查找顺序问题
优先查找自己的变量
没有则查找父类
构造函数如果本类中没有定义,则自动查找父类构造函数
如果本类有定义,则不再继续向上查找
构造函数
是一类特殊的函数,在类进行实例化之前进行调用
如果定义了构造函数,则实例化时使用构造函数,不查找父类构造函数
如果没定义,就查找父类构造函数
如果子类没定义构造函数,则构造对象时参数就按照父类的构造函数的参数构造
classDog():def__init__(self):#构造函数,每次实例化的时候第一个被调用,因为主要工作是进行初始化,所以得名构造函数print("i am dog")
d = Dog()#实例化的时候,括号内的参数需要和构造函数参数相匹配
i am dog
#继承中的构造函数classAnimal():def__init__(self):print("animal")classPaXingAnimal(Animal):def__init__(self):print("paxingdongwu")classDog(PaXingAnimal):def__init__(self):print("i am dog")
benben = Dog()#实例化的时候调用了Dog的构造函数,调用的是子类的构造函数,不是调用的弗雷德构造函数classCat(PaXingAnimal):pass
C = Cat()#此时自动调用构造函数,子类没有构造函数,就向上查找,查找父类的构造函数
i am dog
paxingdongwu
classAnimal():def__init__(self):print("animal")classPaXingAnimal(Animal):def__init__(self, name):#此时有了参数,nameprint("paxingdongwu {0}".format(name))classDog(PaXingAnimal):def__init__(self):print("i am dog")
benben = Dog()classCat(PaXingAnimal):pass
C = Cat()#由于Cat没有构造函数,就向上查找,因为PaXingAnimal的构造函数需要两个参数,实例化的时候就给了一个,报错
i am dog
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-22-bd7db85ae48b> in <module>()
15 class Cat(PaXingAnimal):
16 pass
---> 17 C = Cat() #由于Cat没有构造函数,就向上查找,因为PaXingAnimal的构造函数需要两个参数,实例化的时候就给了一个,报错
TypeError: __init__() missing 1 required positional argument: 'name'
classAnimal():def__init__(self):print("animal")classPaXingAnimal(Animal):def__init__(self, name):#此时有了参数,nameprint("paxingdongwu {0}".format(name))classDog(PaXingAnimal):def__init__(self):print("i am dog")
benben = Dog()classCat(PaXingAnimal):pass
C = Cat("benben")#此时可以运行通过