python - 类实例的不一致行为

时间:2017-05-18 20:18:12

标签: python-2.7 class object self

python类的实例行为不一致。

Code.1

    class A():
        def __init__(self, x):
            self.x = x
        def update(self, x):
            self.x = x

    a = A(3)
    a.update(5)
    print a.x # prints 5

Code.2

    class A():
        def __init__(self, x):
            self.x = x
        def update(self, x):
            self = A(x)

    a = A(3)
    a.update(5)
    print a.x # prints 3

为什么' x'属性是否在第一个片段中更新,并且未在第二个片段中更新?

1 个答案:

答案 0 :(得分:1)

分配给self不会更改当前对象。它只是为(local)self参数变量赋值。

self获得的唯一特殊处理是在调用期间,即

a.update(x)

相当于

A.update(a, x)

分配给self只会覆盖本地参数的值:

def update(self, x):
    # overwrite the value of self with a different instance of A
    # This has no effect outside of update().
    self = A(x)

a = A(3)
a.update(5)

在这种情况下,a仍然是A(3)中的同一个实例。您在A内创建了update()的新实例,并将其分配给self参数,但该修改不会在update()之外进行。