【发布时间】:2018-10-31 17:15:59
【问题描述】:
我有一个装饰器来控制时间限制,如果函数执行超过限制,则会引发错误。
def timeout(seconds=10):
def decorator(func):
# a timeout decorator
return decorator
我想建一个类,使用构造函数将时间限制传递给类。
def myClass:
def __init__(self,time_limit):
self.time_limit = time_limit
@timeout(self.time_limit)
def do_something(self):
#do something
但这不起作用。
File "XX.py", line YY, in myClass
@timeout(self.tlimit)
NameError: name 'self' is not defined
实现这个的正确方法是什么?
【问题讨论】:
-
欢迎来到 SO。 “这行不通”这句话是没有用的。它没有帮助任何人,也没有描述任何问题。什么不起作用,会发生什么,您期望会发生什么?
-
你可以做类似
self.do_something = timeout(time_limit)(self.do_something)的事情,假设你的装饰器工作。这会为类的每个实例添加一个函数对象。但是self不在类体的范围内 -
@dfundako 我更新了,'不起作用'意味着问题没有运行,我发布了错误。
-
@MTANG 这不是你定义类的方式......
-
你是说实例初始化?是的。那是在类主体中,所有代码都在类定义时执行,即在类初始化期间,在您创建任何实例之前。
self只是函数的第一个参数。它像任何其他参数一样工作,即它在 函数被调用时创建一个局部变量。
标签: python