コンストラクタの引数によって実装を変えたい。以下は、私が意味することを示す例です。
class Device(object):
def __init__(self, simulate):
self.simulate = simulate
def foo(self):
if simulate:
self._simulate_foo()
else:
self._do_foo()
def _do_foo(self):
# do foo
def _simulate_foo(self):
# simulate foo
foo()
これで、 を呼び出すたびにif
句が呼び出されます。それを避けるために、正しいメソッドを に動的にバインドできますfoo
。
class Device(object):
def __init__(self, simulate):
if simulate:
self.foo = self._simulate_foo
else:
self.foo = self._do_foo()
def _do_foo(self):
# do foo
def _simulate_foo(self):
# simulate foo
これを行うべきでない理由や、私が気付いていないその他の欠点はありますか? これは本当に速いですか?(継承が別のオプションであることは承知しています)