【发布时间】:2019-12-05 15:58:36
【问题描述】:
为什么 val_n 函数返回 self.__n 的旧值?在我看来,如果 obj.__n 已更新为 3,调用 self.val__n 应该返回 3 而不是 2。
class myClass:
def __init__(self,n=1):
self.__n=n
def val_n(self):
return self.__n
#create an instance, __n is 2
obj=myClass(2)
#update __n to 3
obj.__n=3
#verify obj.__n has changed from 2 to 3
print(obj.__n)
#why does this still return 2?
print(obj.val_n())
【问题讨论】:
-
副本没有说明为什么
obj.__n = 3似乎改变了值。答案是这个赋值,因为它不会出现在方法定义中,所以创建了一个 new 属性,其名称实际上是__n,而不是_myClass__n。使用dir(obj)表明两个名称的属性在赋值之后都存在。 -
@chepner 是的,同意。这个问题并不是真正的重复。这个问题要简单得多,不需要说明公共方法和私有方法之间的区别。
标签: python