0

我知道问题标题听起来很奇怪,但由于英语不是我的第一语言,我发现很难正式化。但是,我也许可以用更多的文字来解释它。

问题是,例如,我正在尝试创建一个名为“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. 我应该如何实现它才能让它工作,或者我应该想出一个解决方法?

4

1 回答 1

1

self是用于描述实例的典型变量名。但是,在创建函数时(在类创建时)评估默认参数。当然self还不存在,因为该类甚至还不存在——该类仍在构建过程中。

执行此操作的典型方法是检查哨兵;

def __init__(self, function=setattr, parameters=None):
    if parameters is None:
       parameters = (self, "togglableAttribute", not self.togglableAttribute)

请参阅我的答案(及其下方的评论),讨论您可以用作哨兵的各种对象以及每个对象的各种优缺点。

于 2012-11-15T15:06:32.533 回答