我创建了一个类并在其构造函数中声明了一些变量。
这个类也有一些方法。
我还创建了一个带有参数的装饰器。
我想要的是在这些方法之前使用该装饰器并从类构造函数传递变量之一。
下面是我的代码:
装饰者:
def thread_switch_decorator(argument):
def decorator(function):
def wrapper(*args, **kwargs):
argument.stop()
result = function(*args, **kwargs)
argument.start()
return result
return wrapper
return decorator
类和方法:
class MainWindow(QMainWindow):
def __init__(self):
self.my_thread = initiate_connect()
@thread_switch_decorator(argument=self.my_thread) # <--- Here is the problem
def home_page(self):
pass
错误:
@thread_switch_decorator(argument=self.my_thread)
NameError: name 'self' is not defined
在上面使用装饰器的代码中,我无法从构造函数传递参数。这是符合逻辑的。
我的问题是,我该怎么做?
发生错误是因为您尝试将 self.my_thread 作为参数传递,但该特定行不存在
self
。 self
存在于类方法下,因为您将 self
作为参数传递给它。
如果你想将
my_thread
传递给装饰器,从逻辑上讲,你必须将它定义在可以访问的地方。
class MainWindow(QMainWindow):
my_thread = initiate_connect() # add my thread here
def __init__(self):
pass # do not add the `my_thread` here
@thread_switch_decorator(argument=my_thread) # <--- remove `self.`
def home_page(self):
pass
您可以这样做,但是代码的工作是主观的并且取决于几个因素。上面的代码不会抛出
NameError