類定義語法格式如下:
class ClassName:
<statement-1>
.
.
.
<statement-N>
一個類也是由屬性和方法組成的,有些時候我們定義類的時候需要設(shè)置類的屬性,因此這就需要構(gòu)造函
類的構(gòu)造函數(shù)如下:
def __init__(self,[...):
類定義了 init() 方法的話,類的實例化操作會自動調(diào)用 init() 方法。
那么如構(gòu)造函數(shù)相對應(yīng)的是析構(gòu)函數(shù),理所當(dāng)然,一個類創(chuàng)建的時候我們可以用過構(gòu)造函數(shù)設(shè)置屬性,那么當(dāng)一個類銷毀的時候,就會調(diào)用析構(gòu)函數(shù)。
析構(gòu)函數(shù)語法如下:
def __del__(self,[...):
仔細觀察的童鞋都會發(fā)現(xiàn),類的方法與普通的函數(shù)有一個特別的區(qū)別,它們必須有一個額外的第一個參數(shù)名稱, 按照慣例它的名稱是 self。
那么這個 self 代表什么呢?
我們可以看下實例,通過實例來找出答案:
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
class Test:
def prt(self):
print(self)
print(self.__class__)
t = Test()
t.prt()
觀察輸出的結(jié)果:
從執(zhí)行結(jié)果可以很明顯的看出,self 代表的是類的實例,輸出的是當(dāng)前對象的地址,而 self.__class__ 則指向類。
當(dāng)然 self 不是 python 關(guān)鍵字,也就是說我們把他換成其他的字符也是可以正常執(zhí)行的。只不過我們習(xí)慣使用 self
Python 在版本的迭代中,有一個關(guān)于類的歷史遺留問題,就是新式類和舊式類的問題,具體先看以下的代碼:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# 舊式類
class OldClass:
pass
# 新式類
class NewClass(object):
pass
可以看到,這里使用了兩者中不同的方式定義類,可以看到最大的不同就是,新式類繼承了object 類,在 Python2 中,我們定義類的時候最好定義新式類,當(dāng)然在 Python3 中不存在這個問題了,因為 Python3 中所有類都是新式類。
那么新式類和舊式類有什么區(qū)別呢?
運行下下面的那段代碼:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# 舊式類
class OldClass:
def __init__(self, account, name):
self.account = account;
self.name = name;
# 新式類
class NewClass(object):
def __init__(self, account, name):
self.account = account;
self.name = name;
if __name__ == '__main__':
old_class = OldClass(111111, 'OldClass')
print(old_class)
print(type(old_class))
print(dir(old_class))
print('\n')
new_class=NewClass(222222,'NewClass')
print(new_class)
print(type(new_class))
print(dir(new_class))
仔細觀察輸出的結(jié)果,對比一下,就能觀察出來,注意喔,Pyhton3 中輸出的結(jié)果是一模一樣的,因為Python3 中沒有新式類舊式類的問題。