用法:
class super([type[, object-or-type]])
返回一个代理对象,该对象将方法调用委托给
type
的父类或兄弟类。这对于访问已在类中重写的继承方法很有用。object-or-type
确定要搜索的方法解析顺序。搜索从type
之后的类开始。例如,如果
object-or-type
的__mro__
是D -> B -> C -> A -> object
并且type
的值是B
,则super()
搜索C -> A -> object
。object-or-type
的__mro__
属性列出了getattr()
和super()
使用的方法解析搜索顺序。该属性是动态的,并且可以在更新继承层次结构时更改。如果省略第二个参数,则返回的超级对象是未绑定的。如果第二个参数是一个对象,
isinstance(obj, type)
必须为真。如果第二个参数是类型,issubclass(type2, type)
必须为真(这对类方法很有用)。super
有两个典型用例。在具有单继承的类层次结构中,super
可用于引用父类而不显式命名它们,从而使代码更易于维护。这种用法与在其他编程语言中使用super
非常相似。第二个用例是在动态执行环境中支持协作多重继承。这个用例是 Python 独有的,在静态编译的语言或仅支持单继承的语言中找不到。这使得实现“diamond diagrams” 成为可能,其中多个基类实现相同的方法。好的设计要求这样的实现在每种情况下都具有相同的调用签名(因为调用的顺序是在运行时确定的,因为该顺序会适应类层次结构的变化,并且因为该顺序可以包括在运行前未知的兄弟类)。
对于这两个用例,典型的超类调用如下所示:
class C(B): def method(self, arg): super().method(arg) # This does the same thing as: # super(C, self).method(arg)
除了方法查找,
super()
也适用于属性查找。一种可能的用例是调用父类或兄弟类中的说明符。请注意,
super()
是作为显式点属性查找的绑定过程的一部分实现的,例如super().__getitem__(name)
。它通过实现自己的__getattribute__()
方法来以支持协作多重继承的可预测顺序搜索类来实现这一点。因此,super()
对于使用语句或运算符(例如super()[name]
)的隐式查找未定义。另请注意,除了零参数形式之外,
super()
不限于使用内部方法。两个参数形式精确地指定参数并进行适当的引用。零参数形式仅适用于类定义,因为编译器填写必要的详细信息以正确检索正在定义的类,以及访问普通方法的当前实例。有关如何使用
super()
设计协作类的实用建议,请参阅 guide to using super() 。
相关用法
- Python super()用法及代码示例
- Python subprocess.run用法及代码示例
- Python subprocess.Popen用法及代码示例
- Python subprocess.check_output用法及代码示例
- Python subprocess.getstatusoutput用法及代码示例
- Python subprocess.Popen.communicate用法及代码示例
- Python sum()用法及代码示例
- Python sklearn.cluster.MiniBatchKMeans用法及代码示例
- Python scipy.ndimage.binary_opening用法及代码示例
- Python scipy.signal.windows.tukey用法及代码示例
- Python scipy.stats.mood用法及代码示例
- Python str.isidentifier用法及代码示例
- Python sklearn.metrics.fbeta_score用法及代码示例
- Python scipy.fft.ihfftn用法及代码示例
- Python scipy.stats.normaltest用法及代码示例
- Python scipy.ndimage.convolve1d用法及代码示例
- Python scipy.stats.arcsine用法及代码示例
- Python scipy.interpolate.UnivariateSpline.antiderivative用法及代码示例
- Python scipy.linalg.hadamard用法及代码示例
- Python socket.create_server用法及代码示例
注:本文由纯净天空筛选整理自python.org大神的英文原创作品 super。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。