#继承:子类具备所有父类的共有变量和共有方法(除私有的)
如果子类没有定义__init__构造方法,会自动调用父类的。
好处:站在老爸的肩膀上,增加属性,增加方法
在原有的基础上进行扩展。
class Person: count = 0 #类变量 nation = "中国" def __init__(self,name,gender): self.name = name self.gender = gender Person.count +=1 print("创建了一个新的人") def get_name(self):#实例方法,必须要实例化 return self.name class ChinaPerson(Person): #如果子类没有定义__init__构造方法 #会自动调用父类的。 def __init__(self,name,gender): Person.__init__(self,name,gender) #调用父类的构造函数:类名+构造函数 def get_gender(self): return self.gender cp = ChinaPerson("吴老师","男") print(cp.count) print(cp.name) print(cp.gender) print(cp.get_name())
C:\Users\dell\Desktop\练习\6>py -3 0616.py
创建了一个新的人
1
吴老师
男
吴老师
#多继承: 在括号里面写上多个基类(父类)
子类的构造函数,如果没有实现,则调用第一个基类的构造函数。
class Person: count = 0 #类变量 nation = "中国" def __init__(self,name,gender): self.name = name self.gender = gender Person.count +=1 print("创建了一个新的人") def get_name(self):#实例方法,必须要实例化 return self.name class Bird: def __init__(self,color): print("a bird is birthed!") self.color = color def fly(self): print("I can fly in the sky!") class ChinaBirdPerson(Person,Bird): #括号里写上多个基类 #如果子类没有定义__init__构造方法 #会自动调用父类的。 def __init__(self,name,gender,color): Person.__init__(self,name,gender) #基类的两个构造方法都要调用,才能使用各自类的变量 Bird.__init__(self,color) def get_gender(self): return self.gender cp = ChinaBirdPerson("吴老师","男","红色") print(cp.color) print(cp.get_name()) #继承了Person类的方法 print(cp.fly()) #继承了Bird类的方法
C:\Users\dell\Desktop\练习\6>py -3 0616.py
创建了一个新的人
a bird is birthed!
红色
吴老师
I can fly in the sky!
None
#多继承,当继承的类存在同名的方法,调用时先执行左边的类Person,如果左边没有时会找右边类的方法
class Person: count = 0 #类变量 nation = "中国" def __init__(self,name,gender): self.name = name self.gender = gender Person.count +=1 print("创建了一个新的人") def get_name(self):#实例方法,必须要实例化 return self.name class Bird: def __init__(self,color): print("a bird is birthed!") self.color = color def fly(self): print("I can fly in the sky!") def get_name(self):#实例方法,必须要实例化 return "bird has no name" class ChinaBirdPerson(Person,Bird): #如果子类没有定义__init__构造方法 #会自动调用父类的。 def __init__(self,name,gender,color): Person.__init__(self,name,gender) Bird.__init__(self,color) def get_gender(self): return self.gender cp = ChinaBirdPerson("吴老师","男","红色") print(cp.get_name())
C:\Users\dell\Desktop\练习\6>py -3 0616.py
创建了一个新的人
a bird is birthed!
吴老师
#python3多继承情况下找同名方法的时候,按照深度优先原则查找
从父类、爷爷类去查找方法,叫做深度优先
从多继承的同级类去查找方法,叫做广度优先
class P: def get_name(self): return "P name!" pass class Person(P): count = 0 #类变量 nation = "中国" def __init__(self,name,gender): self.name = name self.gender = gender Person.count +=1 print("创建了一个新的人") class Bird: def __init__(self,color): print("a bird is birthed!") self.color = color def fly(self): print("I can fly in the sky!") def get_name(self):#实例方法,必须要实例化 return "bird has no name" class ChinaBirdPerson(Person,Bird): #如果子类没有定义__init__构造方法 #会自动调用父类的。 def __init__(self,name,gender): Person.__init__(self,name,gender) #Bird.__init__(self,color) def get_gender(self): return self.gender cp = ChinaBirdPerson("吴老师","男") print(cp.get_name())
C:\Users\dell\Desktop\练习\6>py -3 0616.py
创建了一个新的人
P name!
p -->get_name(爷爷类)
Person(父类) Bird-->get_name(父类)
ChinaBirdPerson(孙类)
cp.get_name()