編集:私はPython 3を使用しています(何人かが尋ねました)。
これは単なる構文の問題だと思いますが、不足しているものがないことを確認したいと思います。Foo と Bar の実装方法の構文の違いに注意してください。彼らは同じことを達成しており、私は彼らが本当に同じことをしていることを確認したいと思っています. 出力は、同じことを行う方法が 2 つしかないことを示しています。そうですか?
コード:
class X:
def some_method(self):
print("X.some_method called")
class Y:
def some_method(self):
print("Y.some_method called")
class Foo(X,Y):
def some_method(self):
X().some_method()
Y().some_method()
print("Foo.some_method called")
class Bar(X,Y):
def some_method(self):
X.some_method(self)
Y.some_method(self)
print("Bar.some_method called")
print("=== Fun with Foo ===")
foo_instance = Foo()
foo_instance.some_method()
print("=== Fun with Bar ===")
bar_instance = Bar()
bar_instance.some_method()
出力:
=== Fun with Foo ===
X.some_method called
Y.some_method called
Foo.some_method called
=== Fun with Bar ===
X.some_method called
Y.some_method called
Bar.some_method called
PS - 言うまでもありませんが、これは単なる抽象的な例です。両方の祖先でsome_method を呼び出す理由について心配する必要はありません。ここでは、言語の構文とメカニズムを理解しようとしています。皆さんありがとう!