为什么我不能将 Python 类字段作为参数传递?

Dav*_*d C 2 class python-2.7

我当时正在使用 Python 2.7 编写一个程序,发现自己试图将 Python 类字段作为同一个类中的参数传递。虽然我修改了代码以使其更清晰(从而消除了这种构造的需要),但我仍然很好奇。

对于一些例子(极大地简化,但概念是存在的):

[注意:对于示例 1 和 2,假设我想要将一个数字作为输入并递增它,或者递增当前值。]

示例 1。

class Example:
    def __init__(self,x):
        self.value = x
    def incr(self,x=self.value):
        self.value = x + 1
Run Code Online (Sandbox Code Playgroud)

结果:

"NameError: name 'self' is not defined"
Run Code Online (Sandbox Code Playgroud)

示例 2.

class Example:
    def __init__(self,x):
        self.value = x
    def incr(self,x=value):
        self.value = x + 1
Run Code Online (Sandbox Code Playgroud)

结果:

"NameError: name 'value' is not defined"
Run Code Online (Sandbox Code Playgroud)

示例 3.

class Example:
    def __init__(self,x):
        ex2 = Example2()
        self.value = ex2.incr(x)
    def get_value(self):
        return self.value

class Example2:
    def __init__(self):
        self.value = 0
    def incr(self,x):
        return x + 1

ex = Example(3)
print ex.get_value()
Run Code Online (Sandbox Code Playgroud)

结果:

4
Run Code Online (Sandbox Code Playgroud)

重申我的问题,为什么我不能将 Python 类字段作为参数传递给它自己的方法?

如果您还有任何其他问题或需要更多信息,请告诉我。谢谢!

Mar*_*ers 5

方法默认值在定义方法时计算,而不是在调用方法时计算。此时该类仍在定义中,因此不存在该类型的对象。因此你不能使用self.

您可以使用在方法中设置默认值None并对此进行测试的解决方法:

def incr(self,x=None):
    if x is None:
        x = self.value
    self.value = x + 1
Run Code Online (Sandbox Code Playgroud)