1 2 3 4

重用父类功能的两种方式

# 在子类派生的新方法中如何重用父类的功能
# 方式一:指名道姓调用某一个类下的函数=》不依赖于继承关系
# class OldboyPeople:
# def __init__(self,name,age,sex):
# self.name=name
# self.age=age
# self.sex=sex
#
# def f1(self):
# print('%s say hello' %self.name)
#
#
# class Teacher(OldboyPeople):
# def __init__(self,name,age,sex,level,salary):
# OldboyPeople.__init__(self,name,age,sex)
#
# self.level = level
# self.salary=salary
#
# tea_obj=Teacher('egon',18,'male',10,3000)
# print(tea_obj.__dict__)

# 方式二:super()调用父类提供给自己的方法=》严格依赖继承关系
# 调用super()会得到一个特殊的对象,该对象会参照发起属性查找的那个类的mro,去当前类的父类中找属性
提示:在Python2中super的使用需要完整地写成super(自己的类名,self) ,而在python3中可以简写为super()。

# class OldboyPeople:
# def __init__(self,name,age,sex):
# self.name=name
# self.age=age
# self.sex=sex
#
# def f1(self):
# print('%s say hello' %self.name)
#
#
# class Teacher(OldboyPeople):
# def __init__(self,name,age,sex,level,salary):
# # super(Teacher,self).__init__(name,age,sex)
# super().__init__(name,age,sex) # 调用的是方法,自动传入对象
#
# self.level = level
# self.salary=salary
#
# # print(Teacher.mro())
# tea_obj=Teacher('egon',18,'male',10,3000)
# print(tea_obj.__dict__)


# super()案例

class A:
def test(self):
print('from A')
super().test()

class B:
def test(self):
print('from B')

class C(A,B):
pass


obj=C()
obj.test()

print(C.mro())
这两种方式的区别是:方式一是跟继承没有关系的,而方式二的super()是依赖于继承的,并且即使没有直接继承关系,super()仍然会按照MRO继续往后查找
posted @ 2020-04-10 20:50  臭弟弟d  阅读(148)  评论(0编辑  收藏  举报