有两种类型的 域 ——类的变量和对象的变量,它们根据是类还是对象 拥有 这个变量而区分。
类的变量 由一个类的所有对象(实例)共享使用。只有一个类变量的拷贝,所以当某个对象对类的变量做了改动的时候,这个改动会反映到所有其他的实例上。
(有点像C++类的静态变量)
对象的变量 由类的每个对象/实例拥有。因此每个对象有自己对这个域的一份拷贝,即它们不是共享的,在同一个类的不同实例中,虽然对象的变量有相同的名称,但是是互不相关的。
#FileName:mClass.py
class MyName():
#定义类变量
count = 0
#类初始化函数
def __init__(self,name,t):
self.Name = name
print('初始化Name %s'%self.Name)
MyName.count += 1
self.__male = t
#类释放函数
def __del__(self):
print('Say by %s'%self.Name)
MyName.count -= 1
if MyName.count == 0:
print('我是最后一个对象实例')
else:
print('仍然还有%d对象实例'%MyName.count)
#定义类内部方法 Hell
def Hell(self):
print('您好!我叫%s'%self.Name)
#在类的方法中的更改私有变量的值
self.__male = not self.__male
def classVar(self):
print('%s说:类变量的值为:%d'%(self.Name,MyName.count))
def isMale(self):
if self.__male == True:
print('%s我是个男人'%self.Name)
else:
print('我是个女人')
#创建对象实例
first = MyName("Zhang Jie",True)
#调用方法
first.Hell()
first.classVar()
first.isMale()
#更改对象变量的值
first.Name = 'jiezhj'
print('改变对象变量值后---------')
first.Hell()
print('-----------------------------')
second = MyName('Sun Li',False)
second.Hell()
second.classVar()
second.isMale()
#使用'__'定义的对象变量为私有变量,在类外部无法修改(以下值没有发生改变)
print("修改属性__male后------------------")
second.__male = True
second.isMale()
print('以下调用__del__函数————————————————')
就如同__init__
方法一样,还有一个特殊的方法__del__
,它在对象消逝的时候被调用。对象消逝即对象不再被使用,它所占用的内存将返回给系统作它用
Python中所有的类成员(包括数据成员)都是 公共的 ,所有的方法都是 有效的 。
只有一个例外:如果你使用的数据成员名称以 双下划线前缀 比如__male
,Python的名称管理体系会有效地把它作为私有变量。
这样就有一个惯例,如果某个变量只想在类或对象中使用,就应该以单下划线前缀。而其他的名称都将作为公共的,可以被其他类/对象使用。
__del__方法相当于C++中的析构函数