【发布时间】:2018-04-14 11:18:41
【问题描述】:
我有这些与 @property 一起使用的装饰器
def android(**params):
def deco(f):
def wrap(*args, **kwargs):
if is_android:
return params
return f()
return wrap
return deco
def ios(**params):
def deco(f):
def wrap(*args, **kwargs):
if not is_android:
return params
return f()
return wrap
return deco
并定义类:
class Foo:
@property
@android(foo=1)
@ios(foo=2)
def foo(self):
pass
f = Foo()
print(f.foo)
每次我想使用时,我都必须一遍又一遍地重复@property。有没有办法将@property 组合成@android 和@ios?我的意思是只需要使用@android 和@ios 而没有@property 但我可以打电话给f.foo
【问题讨论】:
-
你确定这些工作完全符合预期吗?缩进似乎关闭并且它不返回内部函数......在我的计算机上抛出
TypeError: 'NoneType' object is not callable。 -
我稍微编辑了代码。在我的电脑上,代码有效。
-
如果它有效,它究竟返回了什么?
标签: python python-3.x properties python-decorators