web-dev-qa-db-ja.com

Pythonで親メソッドを参照する方法は?

2つのクラス(1つは親クラス、もう1つはサブクラス)があるとします。メソッドが異なるサブクラスでも定義されている場合、親クラスのメソッドを参照するにはどうすればよいですか?

コードは次のとおりです。

class A:
    def __init__(self, num):
        self.value=num
    def f(self, num):
        return self.value+2
class B(A):
    def f(self, num):
        return 7*self.f(num)

最後の行で、無限再帰を作成するBのメソッド自体ではなく、「self.f(num)」コマンドで親クラスAを参照します。前もって感謝します。

28
user1111042

Aを使用することがわかっている場合は、この方法で明示的にAを参照することもできます。

class B(A):
    def f(self,num): 
        return 7 * A.f(self,num)

メンバー関数A.f()にself引数を明示的に与える必要があることを忘れないでください

34
jimifiki

super を使用します。

return 7 * super(B, self).f(num)

またはpython 3では、それはただ:

return 7 * super().f(num)
38
tzaman

他の答えに沿って、スーパークラスメソッド(コンストラクターを含む)を呼び出す方法は複数ありますが、Python-3.xではプロセスが簡略化されています。

Python-2.x

_class A(object):
 def __init__(self):
   print "world"

class B(A):
 def __init__(self):
   print "hello"
   super(B, self).__init__()
_

Python-3.x

_class A(object):
 def __init__(self):
   print "world"

class B(A):
 def __init__(self):
   print "hello"
   super().__init__()
_

super()は、 ドキュメント に従ってsuper(<containing classname>, self)と同等になりました。

6
Aidan Gomez

シンプルに保ちませんか?

class B(A):
    def f(self, num):
        return 7 * A.f(self, num)
2
pillmuncher
class B(A):
    def f(self, num):
        return 7 * super(B, self).f(num)
1
wong2

Pythonで子クラスから親クラスのメソッドを呼び出す? で私の答えを確認してください。

ここでは、他の一部のユーザーを少しひねります(スーパーを使用しない)。

0
BuvinJ

superを使用するか、より明示的にしてこのようなことを行うことができます。

class B(A):
  def f(self, num):
    return 7 * A.f(self, num)
0
Doboy