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