목표 변수를 수정하려면 다음이에서 사용되는 범위를 수정할 수있는 장식을 확인파이썬 데코레이터는 현재 범위에
이 일 경우.
class Blah(): # or perhaps class Blah(ParentClassWhichMakesThisPossible)
def one(self):
pass
@decorated
def two(self):
pass
>>> Blah.decorated
["two"]
이유는 무엇입니까? 필자는 본질적으로 메서드의 사전을 유지할 수있는 클래스를 작성하여 클래스별로 사용 가능한 여러 메서드 목록을 검색 할 수 있습니다. errr .....
나는이 작업을 수행 할 수 :
class RuleClass(ParentClass):
@rule
def blah(self):
pass
@rule
def kapow(self):
pass
def shazam(self):
class OtherRuleClass(ParentClass):
@rule
def foo(self):
pass
def bar(self):
pass
>>> RuleClass.rules.keys()
["blah", "kapow"]
>>> OtherRuleClass.rules.keys()
["foo"]
Python 2.6에는 클래스 데코레이터가 없습니다. –
예, 있습니다. 실제로 코드를 게시하기 전에 두 코드를 모두 테스트했습니다. 그들은 Python 2.6에서 잘 작동합니다. –
내 답변에서와 같이'inspect.getmembers'를 사용하도록 클래스 데코레이터 버전을 변경하면 상속을 처리 할 것입니다 - 그러면 내 답을 삭제할 수 있습니다. (대단히 놀랍지 만 ;-)하지만 당신은 더 완벽합니다. . –