Pythonプログラムにはかなり複雑なクラス階層があります。プログラムには、シミュレータまたはコンパイラのいずれかである多くのツールがあります。どちらのクラスもいくつかのメソッドを共有しているので、すべてのクラスの基本クラスとしてShared
クラスがあります。ストリップダウンの例では、次のようになります。Pythonで継承されたメソッドのエイリアスを作成できますか?
class Shared:
__TOOL__ = None
def _Prepare(self):
print("Preparing {0}".format(self.__TOOL__))
class Compiler(Shared):
def _Prepare(self):
print("do stuff 1")
super()._Prepare()
print("do stuff 2")
def _PrepareCompiler(self):
print("do stuff 3")
self._Prepare()
print("do stuff 4")
class Simulator(Shared):
def _PrepareSimulator(self): # <=== how to create an alias here?
self._Prepare()
class Tool1(Simulator):
__TOOL__ = "Tool1"
def __init__(self):
self._PrepareSimulator()
def _PrepareSimulator(self):
print("do stuff a")
super()._PrepareSimulator()
print("do stuff b")
は私がSimulator/Shared._Prepare
への別名として方法Simulator._PrepareSimulator
を定義することはできますか?
私は__str__ = __repr__
のようなローカルエイリアスを作成できますが、私のケースでは_Prepare
はコンテキストではわかりません。私はself
もcls
もありません。
_PrepareSimulator
の代わりに_Prepare
を返すデコレータを書くことができますか?しかし、私はどのようにして_Prepare
をデコレータで見つけることができますか?
メソッドバインディングも調整する必要がありますか?
ます'_PrepareSimulation'を' Shared._Prepare'のエイリアスとして定義することができます: '_PrepareSimulation = Shared._Prepare'。しかし、私はなぜあなたがしたいと思うのか全く分かりません。実際に何を達成しようとしていますか? –
あなたは '_PrepareSimulation'と' _PrepareSimulator'を持っています - それは違うのですか? – tdelaney
typo :)上位レベルのクラスはメソッドを上書きし、必要に応じてロジックをプラグインすることができます。ほとんどのクラスは基本クラスの機能を使用します – Paebbels