类内全局变量,共有私有,构建析构

2016-10-30  本文已影响0人  wyude

竟然面向对象,那就即使不会面向对象也要尽量面向对象
今天小写一会python,总结这么一点点。


class classA:
    publicCnt=0;#public全局变量 # @ 20161101今天知道了,也就是static才在这里定义,非共享的直接self.var就可以了
    __privateCnt=0;#前面两个横杠就private变量了
    __name="";
#需要注意的是,在Python中,变量名类似__xxx__的,
#也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,
#特殊变量是可以直接访问的,不是private变量,所以,不能用__name__、__score__这样的变量名
    def __init__(self,nameTmp):#默认的构建函数就是这个名字,函数前面加双杠也代表私有
        self.__class__.publicCnt +=1;###快来看啊,加了__class__访问,这个全局变量立马就变成static变量了,成为这个类共享的
        self.__privateCnt +=1;###不加__class__就是普通全局变量了,只属于这个对象的
        self.__name=nameTmp;
        print('init publicCnt',self.__name,self.publicCnt);
        print('init privateCnt',self.__name,self.__privateCnt);
    def __del__(self):#默认的析构函数就是这个名字
        self.__class__.publicCnt -=1;
        self.__privateCnt -=1;
        print('del publicCnt',self.__name,self.publicCnt);
        print('del privateCnt',self.__name,self.__privateCnt);
    def function(self):
        print('just a function');

if __name__=='__main__':
                  a=classA('a');
                  b=classA('b');
                  c=classA('c');
                  d=classA('d');
                  e=classA('e');
看了下输出顺序,不是很懂它的析构顺序怎样,
据说是字典顺序A-Za-z,但这个看着明显不像,
其实就是还不知道是什么字典顺序。
init publicCnt a 1
init privateCnt a 1
init publicCnt b 2
init privateCnt b 1
init publicCnt c 3
init privateCnt c 1
init publicCnt d 4
init privateCnt d 1
init publicCnt e 5
init privateCnt e 1
del publicCnt b 4
del privateCnt b 0
del publicCnt d 3
del privateCnt d 0
del publicCnt e 2
del privateCnt e 0
del publicCnt c 1
del privateCnt c 0
del publicCnt a 0
del privateCnt a 0
上一篇下一篇

猜你喜欢

热点阅读