Ste*_*ini 5 python language-design
在python 2.x中,super接受以下情况
class super(object)
| super(type) -> unbound super object
| super(type, obj) -> bound super object; requires isinstance(obj, type)
| super(type, type2) -> bound super object; requires issubclass(type2, type)
| Typical use to call a cooperative superclass method:
Run Code Online (Sandbox Code Playgroud)
据我所知,super是一个类,包装类型和(最终)实例来解析类的超类.
我对以下几件事感到困惑:
super(instance),具有典型的用法,例如super(self).__init__().从技术上讲,您可以从对象本身获取对象的类型,因此当前策略super(ClassType, self).__init__()是多余的.我假设与旧式类或多重继承的兼容性问题,但我想听听你的观点.super().__init__()?我在这看到了一种魔法,违背了显性比隐含禅更好.我会看到更合适的 self.super().__init__().super(ClassType, self).__init__()是不是用于在协同多继承方案多余的- ClassType不一定的类型self,但要做到合作调用类__init__.
在类层次结构中C inherits B inherits A,C.__init__您希望从C's透视图调用超类'init ,并调用B.__init__; 然后在B.__init__你必须将类类型传递B给super - 因为你想要解析B的调用超类(或者更确切地说,是C类B之后的mro中的下一个).
class A (object):
def __init__(self):
pass
class B (A):
def __init__(self):
super(B, self).__init__()
class C (B):
def __init__(self):
super(C, self).__init__()
Run Code Online (Sandbox Code Playgroud)
如果你现在实例化c = C(),你会发现类类型不是多余的 - super(self).__init__()内部B.__init__不会真正起作用!你所做的是你手动指定调用super的方法在哪个类中(这是通过指向方法类的隐藏变量在Python 3的super中解决的).
两个链接,包含超级和多重继承的示例:
| 归档时间: |
|
| 查看次数: |
632 次 |
| 最近记录: |