なぜ引数object.__init__
を取らないのですか?*args, **kwargs
これは、私が見る限り、いくつかの単純なコードを非常に厄介な方法で壊し、利点はありません。
__init__
すべての親クラスのすべてが呼び出されることを確認したいとします。すべてのinitがsuper().__init__
これを呼び出すという単純な規則に従っている限り、階層全体が実行され、それが1回だけ実行されることが保証されます(親を具体的に指定する必要もありません)。問題は、引数を渡すときに発生します。
class Foo:
def __init__(self, *args, **kwargs):
print("foo-init")
super().__init__(*args, **kwargs) # error if there are arguments!
class Bar:
def __init__(self, *args, **kwargs):
print("bar-init")
super().__init__(*args, **kwargs)
class Baz(Bar, Foo):
def __init__(self, *args, **kwargs):
print("baz-init")
super().__init__(*args, **kwargs)
b1 = Baz() # works
b2 = Baz("error")
これの理由は何ですか?また、最も一般的な(!私の特定のケースでは簡単に解決できますが、階層の追加知識に依存します)回避策は何ですか?私が見ることができる最善の方法は、親がオブジェクトであるかどうかを確認することです。その場合、引数を与えないでください。ひどく醜いです。