2

我已经Finite state machine在 python 中实现了一个。这可行,但实现状态需要编写不必要的代码。

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像下面的例子那样实现一个具体的状态?

@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 回答