私は3つのクラスA
,B
およびC
を持っています。2つのクラスから継承するオブジェクトメソッドを呼び出す
A
のメソッドは、hello(self)
です。 B
はA
から継承し、新しいメソッドhello(self)
を実装します。 C
はB
から継承し、メソッドhello(self)
を再インプリメントします。
インスタンスb = B()
を作成してb.hello()
と呼び出すと、それはB.hello(b)
のように呼び出されます。
問題は、オブジェクトc = C()
を作成し、c.hello()
を呼び出すと、C.hello(c)
ではなく、実際にはB.hello(c)
が呼び出されるという問題です。何故ですか?
私のコードは次のようになります。これは私の作品ではなく、
class A:
def hello(self):
self.helloHandler()
def helloHandler(self):
print('class A method')
class B(A):
def helloHandler(self):
print('class B method')
class C(B):
def helloHandler(self):
print('class C method')
c = C()
c.hello()
。私のコードはこの時点で数千の行を持っています...実際には投稿できませんが、それがポイントです。私は何が問題なのか分かりません。子クラスがいくつかのメソッドを実装するように強制するいくつかのあいまいな理由が重要な場合は、abcmetaを使用します。
編集:私は同じように見える私のオブジェクトの2つを台無しにしました。すべてが必要なように動作します!
コードを投稿してください。 –
メタクラスを使用している場合は、ABCで定義された抽象メソッドから継承された親クラスで定義された具象メソッドをオーバーロードしないでください。 – James
問題としてクローズする投票は再現できません。 – James