2

Finite state machinePython でa を実装しました。これは機能しますが、状態を実装するには不要なコードを記述する必要があります。

class State:
    def __init__(self):
        <do something>

    def __call__():
       <do something different>

class ConcreteState(State):
    def __init__(self):
       super().__init__()

    def __call__():
        super().__call__()
       <do concrete state implementation>

decorator次の例のような具体的な状態を実装するためにa を作成することは可能ですか?

@StateDecorator
def concreteState():
   <do concrete state implementation>
4

2 に答える 2

2

何かのようなもの:

def StateDecorator(implementation):
    class StateImplementation(State):
        def __call__(self):
            super().__call__()
            implementation()
    return StateImplementation
于 2012-11-05T08:53:44.670 に答える
1

見苦しいですが、デコレータは何でも返すことができるので、関数の代わりにクラスを返すことは問題ありません:

def StateDecorator(fn):
    class cls(State):
        def __call__(self):
            super().__call__()
            fn(self)
    return cls

@StateDecorator
def concreteState(self):
    print("cc", self)

concreteState
<class '__main__.cls'>

これにより、使用している静的分析ツールが混乱する可能性があることに注意してください。

于 2012-11-05T08:53:35.280 に答える