これについての明確な説明がどこにも見つからないのは、私を困惑させます。子クラスの同じ名前のメソッド内で基本クラスのメソッドを呼び出す必要があるのはなぜですか。
class Child(Base):
def __init__(self):
Base.__init__(self)
def somefunc(self):
Base.somefunc(self)
基本クラスのメソッドを完全に上書きしたくない場合にこれを行うと思います。本当にそれだけですか?
通常、これは、基本クラスのメソッドを完全に置き換えるのではなく、変更して機能を拡張する場合に行います。 defaultdict
はこの良い例です:
class DefaultDict(dict):
def __init__(self, default):
self.default = default
dict.__init__(self)
def __getitem__(self, key):
try:
return dict.__getitem__(self, key)
except KeyError:
result = self[key] = self.default()
return result
これを行う適切な方法は 基本クラスを直接呼び出す代わりにsuper
を使用する であることに注意してください。そのようです:
class BlahBlah(someObject, someOtherObject):
def __init__(self, *args, **kwargs):
#do custom stuff
super(BlahBlah, self).__init__(*args, **kwargs) # now call the parent class(es)
それは完全にクラスとメソッドに依存します。
基本メソッドの実行前/実行後に何かを実行したい場合、または異なる引数を使用して呼び出したい場合は、明らかにサブクラスのメソッドで基本メソッドを呼び出します。
メソッド全体を置き換えたい場合は、明らかにそれを呼び出さないでください。