2 回答
TA贡献1895条经验 获得超3个赞
@
- 应用装饰器(语法糖)
.
- 属性访问
decorator
是可调用的东西,它返回可调用的东西
propertiy
是一种特定的装饰器,它是一个返回对象(描述符对象)的类(描述符),在 Python 中属性和描述符用于属性访问控制。
现在让我们继续这个问题。Is @predict_all.property('sequences') is a python decorator or a python property?
是装修工。这不是财产。 predict_all
返回Application
类的对象(https://github.com/mila-iqia/blocks/blob/master/blocks/bricks/base.py#L68)。Application
类具有命名方法property
,它是一个常规装饰器,用于按指定名称获取类属性。
您还可以考虑以下使用装饰器的示例(在线试用https://py3.codeskulptor.org/#user303_jaUkAvGSwi_4.py)
import time
def simple_decorator(func):
def wrapper(*args, **kwargs):
print('i am simple decorator', func, args, kwargs)
return func(*args, **kwargs)
return wrapper
@simple_decorator
def func_1(*args, **kwargs):
print('i am func_1')
class DecoratorManager:
def __init__(self):
self.log = list()
def not_that_simple_decorator(self, key):
self.log.append((time.time(), key))
def simple_decorator(func):
def wrapper(*args, **kwargs):
print('i am simple decorator', func, args, kwargs)
return func(*args, **kwargs)
return wrapper
return simple_decorator
d_m = DecoratorManager()
@d_m.not_that_simple_decorator(key='pretty_key')
def func_2(*args, **kwargs):
print('i am func_2')
def func_3(*args, **kwargs):
print('i am func_3')
func_3 = d_m.not_that_simple_decorator(key='pretty_key')(func_3)
func_1(1, a=10)
func_2(2, b=20)
func_3(3, c=30)
print('decorator_manager_log:', d_m.log)
TA贡献1943条经验 获得超7个赞
正如 Charles Duffy 所说, predict_all.property可以是一个函数,它返回一个充当装饰器的函数。
您可以通过下面的演示进一步了解..
class Predict(object):
def property(self, condition):
def wrapper(fn):
def inner(*args, **kw):
if condition == 'sequences':
print("sequences")
else:
print("else")
return fn(*args, **kw)
return inner
return wrapper
predict_all = Predict()
@predict_all.property("sequences")
def foo():
pass
foo()
# result -- sequences
希望它有帮助
添加回答
举报