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'属性是否在第一个片段中更新,并且未在第二个片段中更新?
答案 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()
之外进行。