2012-11-05 3 views
2

Finite state machine을 파이썬으로 구현했습니다. 이것은 작동하지만 상태를 구현하면 불필요한 코드를 작성해야합니다.데코레이터로 클래스 만들기

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> 

답변

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'> 

이 당신이있어 정적 분석 도구를 혼동 수 있다는 것을 알고 있어야합니다 사용.

2

뭔가 같은 :

def StateDecorator(implementation): 
    class StateImplementation(State): 
     def __call__(self): 
      super().__call__() 
      implementation() 
    return StateImplementation