作者millerlai (Scent of Love)
看板Python
标题Re: [问题] 关於class 内变数的问题
时间Thu Jan 22 00:14:27 2009
你的例子,我稍微改一下值。
class CA:
V1 = 'V1'
def __init__(self):
self.V2 = 'V2'
以下的程式码,第一行建立了一个型别为CA的obj1 instance。
经过将obj1.V1设为"V_V" 之後,你觉得最後的输出结果会是如何?
obj1 = CA();
print(obj1.V1);
print(obj1.V2);
obj1.V1 = "V_V";
print(CA.V1);
#---------output---------
V1
V2
V1
#---------output---------
在Java里面,可透过 static 关键字来宣告一个 static field,但是在Python中
static或instance field宣告无法从syntax上来判断。
以上面的例子来说明,如果CA的V1栏位是一个static栏位,那麽最後一次print的结果
是V1却不是V_V,这在Java的观念里是说不通的。
Python是根据栏位的取用者来决定其栏位是static or instance。
当程式透过 obj1 取用V1栏位时,此时V1为instance栏位。
当程式透过 CA 取用V1栏位时,此时V1为static 栏位。
而CA在建构元中所写的V2,是实体栏位没有错。
记忆体的回收,则是当obj1为unreachable时就会release,官方文件说明Python
目前是采用reference counting的演算法来做garbage collection。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.136.84.169
※ 编辑: millerlai 来自: 220.136.84.169 (01/22 00:18)
1F:→ rockcen:谢谢你的补充!! 01/23 06:31