Python中super()参数详解

原文地址:https://www.cnblogs.com/miyauchi-renge/p/10923127.html

super().method()是调用父类中的方法,这个搜索顺序当然是按照MRO从前向后开始进行的

super([type][, object-or-type])

根据官方文档,super函数返回一个委托类type的父类或者兄弟类方法调用的代理对象。super函数用来调用已经再子类中重写过的父类方法。

这句话其实很难看明白,为什么除了父类还可能是兄弟类?

要理解这句话,先谈谈super的参数的传入方式不同带来的不同之处

常见的是直接调用super(),这其实是super(type, obj)的简写方式,将当前的类传入type参数,同时将实例对象传入type-or-object参数,这两个实参必须确保isinstance(obj, type)True

使用该方法调用的super函数返回的代理类是obj所属类的MRO中,排在type之后的下一个父类。

 1 class ChangeAbs(int):
 2     def __new__(cls, val):
 3         # 填入使用super()内建函数去捕获对应父类以调用它的__new__()方法来计算输入数值的绝对值的代码
 4         # 求一个数的绝对值的函数为abs()
 5         # 返回最后的结果
 6         ########## Begin ##########
 7         return super(ChangeAbs, cls).__new__(cls, abs(val))
 8         ########## End ##########
 9 
10 class SortedKeyDict(dict):
11     def keys(self):
12         # 填入使用super()内建函数去捕获对应父类使输入字典自动排序的代码
13         # 返回最后的结果
14         ########## Begin ##########
15         return sorted(super(SortedKeyDict, self).keys())
16         ########## End ##########

猜你喜欢

转载自www.cnblogs.com/y-yang/p/12682746.html