美文网首页
类内全局变量,共有私有,构建析构

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

作者: wyude | 来源:发表于2016-10-30 00:14 被阅读0次

    竟然面向对象,那就即使不会面向对象也要尽量面向对象
    今天小写一会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
    

    相关文章

      网友评论

          本文标题:类内全局变量,共有私有,构建析构

          本文链接:https://www.haomeiwen.com/subject/pnbeuttx.html