7

superタイトルが示すように、の引数の順序をどのように覚えていますか? 私が見逃したニーモニックはありますか?

何年もの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 に答える