3 レベルのクラス継承を持つコードを使用しています。最下位レベルの派生クラスから、階層の 2 レベル上のメソッド (例: super.super 呼び出し) を呼び出す構文は何ですか? 「中間」クラスは、呼び出す必要があるメソッドを実装していません。
78253 次
5 に答える
78
さて、これはそれを行う1つの方法です:
class Grandparent(object):
def my_method(self):
print "Grandparent"
class Parent(Grandparent):
def my_method(self):
print "Parent"
class Child(Parent):
def my_method(self):
print "Hello Grandparent"
Grandparent.my_method(self)
あなたが望むものではないかもしれませんが、私が間違っていない限り、それはpythonが持っている最高のものです。あなたが求めていることは反pythonicに聞こえます.なぜあなたがそれをしているのかを説明しなければなりません.
別の例、おそらくあなたが望むもの(あなたのコメントから):
class Grandparent(object):
def my_method(self):
print "Grandparent"
class Parent(Grandparent):
def some_other_method(self):
print "Parent"
class Child(Parent):
def my_method(self):
print "Hello Grandparent"
super(Child, self).my_method()
ご覧のとおり、は実装されていParent
ませんが、まだ super を使用して「見る」メソッド、つまりのを取得できます。my_method
Child
Parent
Grandparent
my_method
于 2015-07-05T15:59:45.320 に答える
5
レベルを 2 つ上げたい場合は、
class GrandParent(object):
def act(self):
print 'grandpa act'
class Parent(GrandParent):
def act(self):
print 'parent act'
class Child(Parent):
def act(self):
super(Child.__bases__[0], self).act()
print 'child act'
instance = Child()
instance.act()
# Prints out
# >>> grandpa act
# >>> child act
空かどうかをチェック__bases__
したり、中流階級に複数の継承がある場合はループしたりするなど、防御的なものを追加できます。スーパーのタイプが親タイプではないため、スーパーのネストは機能しません。
于 2016-01-29T17:40:59.677 に答える