1
以下是我處理的簡化版本:反思類的屬性,如果它是裝飾,而無需訪問屬性值
def mydecorator(prop):
def wrapper(self_arg):
return prop(self_arg) + 'bar'
return wrapper
class Foo(object):
def __init__(self):
self.value = 'foo'
@property
@mydecorator
def foo(self):
return self.value
@property
def doesnt_have_my_decorator(self):
return 'something that requires a lot of computation'
f = Foo()
print f.foo # prints 'foobar'
現在我想什麼,能夠做的,是反思f.foo
,而沒有真正訪問它的價值,並檢查它是否用@mydecorator
裝飾。這可能嗎?
用例可以在某個上下文中將某個屬性列爲「安全」,但在「不安全」的情況下無需實際訪問它的值。
我已經看到this great post,但它似乎需要foo
已被訪問。
我發現,我可以看到,這是一個property
有:
f.__class__.__dict__['foo'].__class__
,但我一直沒能找到任何引用mydecorator
。既然是Python,我肯定有辦法,但到目前爲止我還沒有弄明白...
雖然黑客通過它,我幾乎到了那裏。我儘可能設置'wrapper._mydecorator = True',但我無法弄清楚如何找到該屬性。這讓我一直在那裏。非常感謝! – elethan