1、基本使用
class MyClass(object):
message = 'Hello Developer'
def show(self):
print(self.message)
def main():
print(MyClass.message)
MyClass.message = 'Hello mudy'#修改成員變量
print(MyClass.message)
inst = MyClass()#實(shí)例化一個(gè)MyClass的對象
inst.show()
if __name__ == '__main__':
main()
Hello Developer
Hello mudy
Hello mudy
- 類名為MyClass
- 該類中定義了一個(gè)成員變量message,并對其賦了初始值
- 類中定義了
成員函數(shù)show(self),注意類中的成員函數(shù)必須要帶參數(shù)self - 參數(shù)self是對象本身的引用,在成員函數(shù)體可以引用self參數(shù)獲得對象的信息
2、構(gòu)造函數(shù)
?構(gòu)造函數(shù)是一種特殊的類成員方法,主要用來在創(chuàng)建對象時(shí)初始化對象,即為對象成員變量賦初始值。Python中的類構(gòu)造函數(shù)用__init__命名,為MyClass添加構(gòu)造函數(shù)方法,并實(shí)例化一個(gè)對象。
class MyClass(object):
message = 'Hello ,Developer'
def show(self):
print(self.message)
def __init__(self):#構(gòu)造函數(shù)在MyClass被實(shí)例化時(shí)被Python解釋器自動調(diào)用,
print('構(gòu)造函數(shù)被調(diào)用')
def main():
inst = MyClass()
inst.show()
if __name__=='__main__':
main()
構(gòu)造函數(shù)被調(diào)用
Hello ,Developer
- 默認(rèn)參數(shù)
class MyClass:
message = 'Hello Developer'
def show(self):
print(self.message)
def __init__(self,name='mudy',age='18'):
print('構(gòu)造函數(shù)被調(diào)用了,參數(shù)是',name,' ',age)
def main():
inst = MyClass()
inst.show()
inst2 = MyClass('huy')
inst2.show()
inst3 = MyClass('dabao','17')
inst3.show()
inst4 = MyClass(age='20')
inst4.show()
if __name__ == '__main__':
main()
構(gòu)造函數(shù)被調(diào)用了,參數(shù)是 mudy 18
Hello Developer
構(gòu)造函數(shù)被調(diào)用了,參數(shù)是 huy 18
Hello Developer
構(gòu)造函數(shù)被調(diào)用了,參數(shù)是 dabao 17
Hello Developer
構(gòu)造函數(shù)被調(diào)用了,參數(shù)是 mudy 20
Hello Developer
?注意:在構(gòu)造函數(shù)中不能有返回值
?在Python中不能定義多個(gè)構(gòu)造函數(shù),但可以通過為命名參數(shù)提供默認(rèn)值的方式達(dá)到利用多種方式構(gòu)造對象的目的。
3、析構(gòu)函數(shù)
?析構(gòu)函數(shù)是構(gòu)造函數(shù)的反向函數(shù),在銷毀(釋放)對象時(shí)將調(diào)用它們。析構(gòu)函數(shù)往往用來做“清理善后”的工作,例如數(shù)據(jù)庫鏈接對象可以在析構(gòu)函數(shù)中釋放對數(shù)據(jù)庫資源的占用。Python中為類定義析構(gòu)函數(shù)的方法是在類中定義一個(gè)名字為__del__的沒有返回值和參數(shù)的函數(shù)。
?與Java類似,Python解釋器的堆中存儲著正在運(yùn)行的應(yīng)用程序所建立的所有對象,但是他們不需要程序代碼來顯示地釋放,因?yàn)镻ython解釋器會自動跟蹤他們的引用計(jì)數(shù),并自動銷毀(同時(shí)調(diào)用析構(gòu)函數(shù))已經(jīng)沒有被任何變量引用的對象,在這種場景中,開發(fā)者并不知道對象的析構(gòu)函數(shù)何時(shí)會被調(diào)用,同時(shí)Python提供了顯示銷毀對象的方法:使用del關(guān)鍵字。
class MyClass(object):
message = 'Hello Developer'
def show(self):
print(self.message)
def __init__(self,name='mudy',age='18'):
print('構(gòu)造函數(shù)被調(diào)用,參數(shù)是',name,age)
def __del__(self):
print('析構(gòu)函數(shù)被調(diào)用')
def main():
inst = MyClass()
inst.show()
inst2 = MyClass('huy')
inst2.show()
del inst,inst2
inst3 = MyClass('huy','18')
inst3.show()
del inst3
if __name__ == '__main__':
main()
構(gòu)造函數(shù)被調(diào)用,參數(shù)是 mudy 18
Hello Developer
構(gòu)造函數(shù)被調(diào)用,參數(shù)是 huy 18
Hello Developer
析構(gòu)函數(shù)被調(diào)用
析構(gòu)函數(shù)被調(diào)用
構(gòu)造函數(shù)被調(diào)用,參數(shù)是 huy 18
Hello Developer
析構(gòu)函數(shù)被調(diào)用
如果不手動del,則輸出結(jié)果如下:
構(gòu)造函數(shù)被調(diào)用,參數(shù)是 mudy 18
Hello Developer
構(gòu)造函數(shù)被調(diào)用,參數(shù)是 huy 18
Hello Developer
構(gòu)造函數(shù)被調(diào)用,參數(shù)是 huy 18
Hello Developer
析構(gòu)函數(shù)被調(diào)用
析構(gòu)函數(shù)被調(diào)用
析構(gòu)函數(shù)被調(diào)用