方法一:指名道姓,即父类名.父类方法()
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
classPerson():
country="西安"
def__init__(self,name,age):
self.name=name
self.age=age
defrun(self):
print("老爹欢迎你....")
classSon(Person):
def__init__(self,name,age,sex):
#调用父类方法一
Person.__init__(self,name,age)
defrun(self):
Person.run(self)#调用父类方法
print("%s欢迎光临...."%self.name)
s=Son("李白",26,"男")
s.run()
运行结果
方法二:super()
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
classPerson():
country="西安"
def__init__(self,name,age):
self.name=name
self.age=age
defrun(self):
print("老爹欢迎你....")
classSon(Person):
def__init__(self,name,age,sex):
#调用父类方法一
# Person.__init__(self, name, age)
#调用父类方法二
super(Son,self).__init__(name,age)
self.sex=sex
defrun(self):
Person.run(self)#调用父类方法
print("%s欢迎光临...."%self.name)
s=Son("李白",26,"男")
s.run()
二者使用哪一种都可以,但最好不要混合使用
当你使用super()函数时,Python会在MRO列表上继续搜索下一个类。只要每个重定义的方法统一使用super()并只调用它一次,那么控制流最终会遍历完整个MRO列表,每个方法也只会被调用一次(注意注意注意:使用super调用的所有属性,都是从MRO列表当前的位置往后找,千万不要通过看代码去找继承关系,一定要看MRO列表)
领取专属 10元无门槛券
私享最新 技术干货