私は、3つのレベルのクラス継承を持つコードを使用しています。最下位レベルの派生クラスから、メソッドを呼び出すための構文は、階層を2レベル上げます。 super.superコール? 「中間」クラスは、呼び出す必要のあるメソッドを実装しません。
さて、これはそれを行う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が持っている最高のものです。あなたが求めていることは反Python的であり、あなたが物事を幸せなpython方法で提供するためになぜそれをしているのかを説明する必要があります。
別の例、おそらくあなたが望むもの(あなたのコメントから):
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
はmy_method
を実装していませんが、Child
はsuperを使用して、Parent
が「見る」メソッド、つまりGrandparent
を取得できます。 my_method
。
これは私のために働く:
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"
super(Parent, self).my_method()
python 3で作成およびテスト済み
class Vehicle:
# Initializer / Instance Attributes
def __init__(self, name, price):
self.name = name
self.price = price
# instance's methods
def description(self):
print("\nThe car {} has a price of {} eur".format(self.name, self.price))
#Object Vehicle
m3 = Vehicle("BMW M3", 40000)
m3.description()
class Camper(Vehicle):
def __init__(self,nome,prezzo,mq):
super().__init__(nome,prezzo)
self.mq=mq
# instance's methods
def description(self):
super().description()
print("It has a dimension of",format(self.mq)+" mq")
#Camper Object(A camper is also a Vehicle)
marcopolo=Camper("Mercede MarcoPolo",80000,15)
marcopolo.description()
出力:
BMW M3の価格は40000 eurです。
Mercede MarcoPoloの価格は80000 eurです。
15 mqの寸法