【发布时间】:2017-09-05 22:42:30
【问题描述】:
我是 Python 新手,看到了这段代码 sn-p:
class C:
abc = 2
c1 = C()
print c1.abc
c1.abc = 3
print c1.abc
del c1.abc
print c1.abc
我理解为什么第一个和第二个打印语句分别打印 2 和 3。但是,我有 Java 背景,我不明白“del c1.abc”行中发生了什么以及为什么最后一个打印语句打印 2 和不是某种错误。有人可以解释吗?如果可能的话,通过与 Java 进行比较?
【问题讨论】:
-
@Aaron 我不明白这与我的问题有什么关系。你能详细说明一下吗?
-
这里对于 Python 初学者的棘手问题是
abc是一个 类变量(即“静态”变量),而当您使用c1.abc = 3时,您shadow 带有实例变量的类变量。当您执行del c1.abc时,del将应用于 instance 变量,因此现在调用c1.abc返回类变量。 -
@Aaron 但这不是这里发生的事情。
-
@juanpa.arrivillaga Tha 正是我一直在寻找的答案!谢谢!您可以将其复制到实际答案吗?然后我可以投票并接受:)
-
@juanpa.arrivillaga 是的,我会删除我的评论.. 你的更相关
标签: python memory-management attributes