_helper
は、あなたが何か他のものにそれを設定することができ、その後、A().foo()
への呼び出しがあることを使用するモジュールAでちょうど世界的です新しいグローバル。これは、サルパッチと呼ばれています。
あなたがclass B
のみを使用_helper
にパッチを適用したい場合は、その後、あなたは毎回パッチを適用し、未パッチする必要があると思います。これが行われますが、スレッドセーフではなく、一般的にあなたが開始するモジュールAをリファクタリングすることができない場合にのみ使用してくださいすることができます。
class B(A):
def foo(self):
orig_helper = moduleA._helper
moduleA._helper = _helper
try:
return super().foo()
finally:
moduleA._helper = orig_helper
あなたにもちょうどクラスB
にfoo
をオーバーライドすることがあります。
def _helper:
print('helper_b')
class B(A):
""" Somehow make B.foo call module B _helper without overriding A.foo"""
def foo(self):
_helper()
あなたは、モジュールAをリファクタリングすることができた場合、あなたはクラスで_helper
機能に静的関数を作ることができる:あなたがCAポイント
class A():
@staticmethod
def _helper():
print('helper_a')
def foo(self):
self._helper()
れます。
class B():
@staticmethod
def _helper():
print('helper_b')
など
あなたは、あなたが 'B()を呼び出したときに起こることを期待していFOO()':nは
B
の代替バージョンを提供? –