7

正如标题所说,你如何记住super's 参数的顺序?有没有我错过的助记符?

经过多年的 Python 编程,我仍然需要查找它:(

(为了记录,它是super(Type, self)

4

4 回答 4

11

继承让我想到了一个分类层次。参数的顺序super是分层的:首先是类,然后是实例。

另一个想法,灵感来自~unutbu 的回答:

class Fubb(object):
    def __init__(self, *args, **kw):
        # Crap, I can't remember how super() goes!?

建立正确super()呼叫的步骤。

__init__(self, *args, **kw)              # Copy the original method signature.

super(Fubb).__init__(self, *args, **kw)  # Add super(Type).
                     /
              -------
             /
super(Fubb, self).__init__(*args, **kw)  # Move 'self', but preserve order.
于 2010-07-03T14:49:09.027 回答
10

只需记住这self可选的——super(Type)允许访问未绑定的超类方法——可选参数总是排在最后。

于 2010-07-03T14:59:26.727 回答
5

我不。在 Python 3 中,我们可以只写

super().method(params)
于 2010-07-03T14:41:20.990 回答
2

通常,在定义super内部使用class。在那里,(再次通常),第一个参数super应该始终是class.

class Foo(object):
    def __init__(self,*args,**kw):
        super(Foo,self).__init__(*args,**kw)
于 2010-07-03T15:41:55.283 回答