私はいくつかの異なるケースタイプ(Pythonで)のハンドラを書く必要があります。これらすべてのタイプのインターフェースは同じですが、処理ロジックは異なります。カプセル化対継承、選択の助けになります
1つのオプションは、__init__のパラメータの1つとして、特定のハンドラタイプを受け取り、共通のクラスを定義することになります。
class Handler:
def __init__ (self, handlerType):
self._handlerType = handlerType
self._handler = handlerType.handleStuff
def handleStuff(self, *args, **kwargs):
return self._handler(args, kwargs)
# case specific handlers
class Handler_Case1:
def handleStuff(self, *args, **kwargs):
print 'Handling Case 1'
class Handler_Case2:
def handleStuff(self, *args, **kwargs):
print 'Handling Case 2'
if __name__ == '__main__':
handlers = []
handlers.append(Handler(Handler_Case1))
handlers.append(Handler(Handler_Case2))
for h in handlers:
h.handleStuff()
しかし、これはTypeError例外で結果:
TypeError: unbound method handleStuff() must be called with Handler_Case1 instance as first argument (got tuple instance instead)
別のオプションですhere( "Q:0行のコードで抽象クラスをPythonで実装できますか?"):
class Handler:
def handleStuff(self, *args, **kwargs): abstract
def commonFunction(self):
print 'Common function'
# case specific handlers
class Handler_Case1(Handler):
def handleStuff(self, *args, **kwargs):
print 'Handling Case 1'
class Handler_Case2(Handler):
def handleStuff(self, *args, **kwargs):
print 'Handling Case 2'
if __name__ == '__main__':
handlers = []
h1 = (Handler_Case1())
h2 = (Handler_Case2())
handlers.append(h1)
handlers.append(h2)
for h in handlers:
h.handleStuff()
print
のように抽象関数を模倣します。
- 2つのアプローチのより神託です:
だから、実際に、私は2つの質問がありますか? と
- 最初の実装方法は?