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()#實例化一個MyClass的對象
inst.show()
if __name__ == '__main__':
main()
Hello Developer
Hello mudy
Hello mudy
- 類名為MyClass
- 該類中定義了一個成員變量message,并對其賦了初始值
- 類中定義了
成員函數(shù)show(self)
,注意類中的成員函數(shù)必須要帶參數(shù)self
- 參數(shù)self是對象本身的引用,在成員函數(shù)體可以引用self參數(shù)獲得對象的信息
2、構(gòu)造函數(shù)
?構(gòu)造函數(shù)是一種特殊的類成員方法桅打,主要用來在創(chuàng)建對象時初始化對象
,即為對象成員變量賦初始值氏仗。Python中的類構(gòu)造函數(shù)用__init__
命名妖胀,為MyClass添加構(gòu)造函數(shù)方法杠输,并實例化一個對象。
class MyClass(object):
message = 'Hello ,Developer'
def show(self):
print(self.message)
def __init__(self):#構(gòu)造函數(shù)在MyClass被實例化時被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
- 默認參數(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òu)造函數(shù)夭委,但可以通過為命名參數(shù)提供默認值的方式達到利用多種方式構(gòu)造對象的目的幅狮。
3、析構(gòu)函數(shù)
?析構(gòu)函數(shù)是構(gòu)造函數(shù)的反向函數(shù)株灸,在銷毀(釋放)對象時將調(diào)用它們。析構(gòu)函數(shù)往往用來做“清理善后”的工作擎值,例如數(shù)據(jù)庫鏈接對象可以在析構(gòu)函數(shù)中釋放對數(shù)據(jù)庫資源的占用慌烧。Python中為類定義析構(gòu)函數(shù)的方法是在類中定義一個名字為__del__
的沒有返回值和參數(shù)的函數(shù)。
?與Java類似鸠儿,Python解釋器的堆中存儲著正在運行的應(yīng)用程序所建立的所有對象屹蚊,但是他們不需要程序代碼來顯示地釋放,因為Python解釋器會自動跟蹤他們的引用計數(shù)进每,并自動銷毀(同時調(diào)用析構(gòu)函數(shù))已經(jīng)沒有被任何變量引用的對象汹粤,在這種場景中,開發(fā)者并不知道對象的析構(gòu)函數(shù)何時會被調(diào)用田晚,同時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)用