我需要一些帮助来从装饰器中的类中获取值,但我一直陷于困境。
tasks.py
@lazy_task()
def import_(date_time):
importer = Importer(date_time=date_time)
importer.import_jira()
import_.py
class Importer(object):
RECIPIENTS = 'friday@gmail.com'
def __init__(self, date_time=None):
self.date_time = data_time
def import_jira(self):
pass
decorators.py
def lazy_task():
def decorator(func):
@wraps(func)
def get_lazy_task(self, *args, **kwargs):
func(*args, **kwargs)
print self.RECIPIENTS # Not working
return get_lazy_task
return decorator
请帮助我如何从文件RECIPIENTS
中获取decorator
中的import.py
答案 0 :(得分:1)
在文件class Queue {
constructor() {
this.data = [];
}
toString() {
console.log("Hello This is example");
}
}
const queue1 = new Queue();
console.log(queue1);
中,import_.py
是类RECIPIENTS
的{{1}}。这意味着static variable
需要访问变量Importer
,在这种情况下就是RECIPIENTS
。
我建议您从<class-name>.<var-name>
导入Importer.RECIPIENTS
并打印Importer
而不是import_.py
。
将此行添加到文件Importer.RECIPIENTS
self.RECIPIENTS
并将打印语句从decorators.py
更改为
from import_ import Importer
我写了一个简单的例子来完成这项工作。
foo.py
print self.RECIPIENTS
bar.py
print Importer.RECIPIENTS
在运行文件class Foo:
VALUE = 'value'
def __init__():
pass
时,我们得到此输出。
from functools import wraps
from foo import Foo # importing class Foo from foo.py
def bar():
def decorator(func):
@wraps(func)
def inner():
print Foo.VALUE
return inner
return decorator
bar()(lambda: None)()
如果您不想在每个需要使用bar.py
值的文件的顶部添加多余的import语句,则可以像这样直接导入并打印
$ python bar.py
value
但是,没有其他方法可以在不导入的情况下从另一个文件访问值。
答案 1 :(得分:-1)
在import_
函数中,Importer
实例是一个局部变量-而不是函数的参数-因此,装饰器无法访问它。期间。