python 类实例的私有属性真的是私有吗?看例子!

python 类实例的私有属性真的是私有吗?看例子!

class private(object):

    

    __var = list() #this is a private argument

    

    def get(self):

        print self.__var,id(self.__var)

    

    def set(self ,data):

        self.__var.append(data)

        

a = private()

a.get()

a.set("this is new private content!")

b = private()

b.set("b set new var!")

b.get()

 

 

class private1(object):

    

    __var = " " #this is a private argument

    

    def get(self):

        print self.__var,id(self.__var)

    

    def set(self ,data):

        self.__var = data

        

c = private1()

c.set("testsss")

c.get()

c.set("testsss1111")

c.get()

 

运行结果:

 

[ ] 140559203342888

['this is new private content!', 'b set new var!'] 140559203342888

testsss 140559203329680

testsss1111 140559203328912

第一个类的私有变量__var是一个list类型,当使用方法进行append的时候,他的两个实例的__var是相同的,因为__var指向相同的内存地址。append对原始对象进行操作而不是创建一个新的对象将新的内容加入list。

第二个类的私有变量__var是一个str类型,当使用方法进行赋值后,地址发生变化。因为字符串是复制,会创建一个新的地址空间进行保存。

以上例子说明,当你一个类的多个实例使用都一个的私有变量时候,只要这个变量是一个序列并且这个序列的操作是在同一个对象上内部完成的时候,所有实例所引用都是同一个对象。

这 几天在写斗地主游戏,调试了1天半,我靠。真的无语了,cocos2d貌似有bug,使用push_handlers和pop_handlers,当大量 的调用的时候会产生一些对象的事件响应丢失。最好不要在sprite的on_enter和on_exit上使用这个函数,除非你的sprite很少,反正 我现在只要在sprite的子类上on_enter和on_exit上自动注册事件和注销事件就会造成部位对象的事件响应丢失(貌似事件被注销了)

posted @ 2014-10-22 23:41  Raffeale  阅读(774)  评论(0)    收藏  举报