特殊的方法
__init__方法
__init__方法在类的一个对象被建立时,马上运行。你可以利用这个方法对对象进行初始化。__init__方法类似于C++、C#和Java中的constructor。(注意:init的两边各有两条下划线)
[python]viewplaincopy
classPerson:
def__init__(self,name):#在__init__中初始化name
self.name=name
defsayHi(self):
print("大家好,我是人贱人爱的",self.name)
p=Person("王尼玛")
p.sayHi()
__del__方法
__del__在对象消逝的时候被调用。对象消逝即对象不再被使用,它所占用的内存将返回给系统作它用。__del__方法与destructor的概念类似。
[python]viewplaincopy
classPerson:
'''''Representsaperson.'''#通过Person.__doc__查看
population=0
def__init__(self,name):
'''''Initializestheperson'sdata.'''
self.name=name
print('(Initializing%s)'%self.name)#格式化输出字符串.
#Whenthispersoniscreated,he/she
#addstothepopulation
Person.population+=1#类的变量在引用的时候是类名.类变量
def__del__(self):
'''''Iamdying.'''
print('%ssaysbye.'%self.name)
Person.population-=1
ifPerson.population==0:
print('Iamthelastone.')
else:
print('Therearestill%dpeopleleft.'%Person.population)
defsayHi(self):#可通过Person.sayHi.__doc__查看
'''''Greetingbytheperson.
Really,that'sallitdoes.'''
print('Hi,mynameis%s.'%self.name)
defhowMany(self):
'''''Printsthecurrentpopulation.'''
ifPerson.population==1:
print('Iamtheonlypersonhere.')
else:
print('Wehave%dpersonshere.'%Person.population)
swaroop=Person('Swaroop')
swaroop.sayHi()
swaroop.howMany()
kalam=Person('AbdulKalam')
kalam.sayHi()
kalam.howMany()
print(kalam.name)#对象变量
swaroop.sayHi()
swaroop.howMany()
print(swaroop.name)
输出
[python]viewplaincopy
(InitializingSwaroop)
Hi,mynameisSwaroop.
Iamtheonlypersonhere.
(InitializingAbdulKalam)
Hi,mynameisAbdulKalam.
Wehave2personshere.
AbdulKalam
Hi,mynameisSwaroop.
Wehave2personshere.
Swaroop
小提示
1.类成员的访问权限
Python中所有的类成员都是公共的,所有的方法都是有效的。
只有一个例外:如果你使用的数据成员名称以双下划线前缀比如__privatevar,Python的名称管理体系会有效地把它作为私有变量。
还有这样就有一个惯例,如果某个变量只想在类或对象中使用,就应该以单下划线前缀。而其他的名称都将作为公共的,可以被其他类/对象使用。记住这只是一个惯例,并不是Python所要求的(与双下划线前缀不同)。
2.类的变量与对象的变量
类的变量:由一个类的所有对象(实例)共享使用。当某个对象对类的变量做了改动的时候,这个改动会反映到所有其他的实例上。(类名.类变量)
对象的变量:由类的每个对象/实例拥有。因此每个对象有自己对这个域的一份拷贝,即它们不是共享的,在同一个类的不同实例中,虽然对象的变量有相同的名称,但是是互不相关的。(对象名.变量)
3.print的格式化输出
支持参数格式化,与C语言的printf类似。
[python]viewplaincopy
>>>strHello="thelengthof(%s)is%d"%('HelloWorld',len('HelloWorld'))
>>>print(strHello)
输出
[python]viewplaincopy
thelengthof(HelloWorld)is11
[python]viewplaincopy
>>>print("你好我的名字是%s,我今年%d岁了!"%("王尼玛",2))#注意,字符串与后面变量之间没有逗号!
输出
[python]viewplaincopy
你好我的名字是王尼玛,我今年2岁了!



