让我们来看看这段代码。
class property_name(object):
def __init__(self, function):
self.property_name = function.__name__
self.function = function
def __call__(self, *args, **kwargs):
self.function(self)
class Test:
def __init__(self):
pass
# @property
@property_name
def temperature(self):
print(self.property_name)
return 24.5
# @property
@property_name
def time(self):
print(self.property_name)
return "12:45 am"
if __name__ == '__main__':
t = Test()
print(t.temperature)
print(t.time)
现在,到目前为止,我知道,属性装饰器尚无法以temperature
或time
之类的字符串来获取属性名称。
因此,我决定尝试通过编写装饰器property_name
来获取函数名称。使用此装饰器装饰功能完全可以满足我的需求。装饰器将属性property_name
添加到带有已调用函数名称的类中。到目前为止,一切正常并且很清楚。
但是,当我链接property
装饰器时,就会遇到麻烦:
Traceback (most recent call last):
File "test_func_name.py", line 28, in <module>
t.temperature()
TypeError: 'NoneType' object is not callable
调试代码,我发现方法temperature
和time
都是None
。
如何将装饰器链接到property
?对于这个问题有更好的解决方案吗?
答案 0 :(得分:1)
您必须返回在driverService.HideCommandPromptWindow = true;
中调用的函数的值:
property_name.__call__
然后
class property_name(object):
def __init__(self, function):
self.property_name = function.__name__
self.function = function
def __call__(self, *args, **kwargs):
return self.function(self)