类内全局变量,共有私有,构建析构
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