我有一個類,看起來像這樣:修改通過方法裝飾類屬性
class Test(object):
data = {}
@add_to_data(1)
def method_1(self, x, y):
pass
@add_to_data(1, 2, 3)
def method_2(self, x, y):
pass
@add_to_data(5, 6, 7)
def method_3(self, x, y):
pass
我想它,以便在「導入時間」的data
屬性附加傷害之類的是:
>>> Test.data
{'method_1': [1], 'method_2': [1, 2, 3], 'method_3': [5, 6, 7]}
目前我有這個(data
是defaultdict
):
def add_to_data(*items):
def decorator(func):
for item in items:
name = func.__name__
cls = ??
cls.data[name].append(item)
return func
return decorator
但我不知道如何獲得類對象。任何幫助?
我沒有想到'sys._getframe()';你是對的,那會奏效。 – abarnert
我在閱讀'zope.interface'源代碼時第一次看到這個技巧。這是一種技巧,裝飾者的用戶看起來非常乾淨,但其他人可能難以理解實現。 –