我知道问题标题听起来很奇怪,但由于英语不是我的第一语言,我觉得很难形式化。但是,我可以用更多的文字来解释它。
问题是,我正在尝试创建一个名为“Foo”的类。
# ../myProject/Foo.py
class Foo:
'''Represents an example class for stackoverflow'''
现在所有的Foo类'实例都有function
属性,它只保存一个可以通过实例执行的函数。此外,还有一个parameters
属性,一个元组或一个列表,它保存了function
被调用时应该使用的参数。
def __init__(self, function, parameters):
self.function = function
self.parameters = parameters
def callFunction(self):
if self.function:
self.function(*self.parameters)
这似乎工作正常,但问题是,我想给它一个默认值,来改变实例的属性。我基本上想做以下事情:
def __init__(self, function=setattr, \
parameters=(self, "togglableAttribute", not self.togglableAttribute)):
这样做会引发NameError: name 'self' is not defined
。我应该如何实现它以使其工作,或者我应该提出一个解决方法?
答案 0 :(得分:1)
self
是用于描述实例的典型变量名称。但是,在创建函数时(在类创建时)会计算默认参数。当然self
尚不存在,因为该类尚未存在 - 该类仍处于构建过程中。
执行此操作的典型方法是检查哨兵;
def __init__(self, function=setattr, parameters=None):
if parameters is None:
parameters = (self, "togglableAttribute", not self.togglableAttribute)
请参阅我的回答here(及其下面的评论),讨论您可以用作哨兵的各种对象以及每种对象的各种优缺点。