標籤:特性 strong 必須 自身 iss nbsp type 程式 port
一、幾個概念
類:代表對象的集合。
對象:對象包括特性和方法。特性只是作為對象的一部分的變數,方法則是儲存在對象內部的函數。所有對象都屬於某一個類,稱為類的執行個體。
方法:綁定到對象特性上面的函數稱為方法。
封裝:指向程式中的其他部分隱藏對象的具體實現細節的原則。
繼承:一個類可以使一個或者多個類的子類。子類繼承超類的所有方法,
子類:當一個對象所屬的類是另外一個對象所屬類的子集時,前者就被稱為後者的子類,後者就是前者的的超類。
二、類
2.1 建立類
在建立類之前,先說兩個概念。
新式類:建立新式類建立必須有一個父類,如果不指定,預設就是繼承object。
舊式類:沒有父物件的的類。
在Python3.0以後不存在舊式類,之前的版本,建立類的時候就需要指明繼承新式類,在模組或者指令碼開始的地方加上__metaclass__ = type。
class ClassName: ‘類的協助資訊‘ #類文檔字串 class_suite #類體
1.通過class語句可以建立一個類。
2.和定義函數類似,可以在類名下面加上關於類的協助資訊,通過ClassName.__doc__查看。
2.2 self說明
類的方法與普通的函數只有一個特別的區別——它們必須有一個額外的第一個參數名稱, 按照慣例它的名稱是 self。
class test: def fun1(self): xxxx def fun2(self, par1, par2): xxxx
self代表的是對象自身,當然你可以取名不叫self,其它命名也可以。通過self,其它成員方法就可以訪問要對其特效進行操作的對象本身了。
在調用方法時,無需顯示的提供self這個參數。
2.3 私人化
為了讓方法或者特性變成私人(從外部無法訪問),只要在它的名字前面加上雙底線即可。
class Test: def __fun1(self): xxxx def fun2(self): self.__fun1()
如上述例子所示,__fun1從外界無法訪問,但是在類的內部還是能使用。但是這個並不是真的無法訪問,因為帶雙底線的名字被_Test_fun1的形式。所以通過test._Test_fun1()形式還是能訪問。
前面帶有底線的名字不會被帶星號的import語句(from module import *)匯入。
2.4 指定超類
class Test(object): xxxx
將其他類名寫在class語句後面的圓括弧裡就可以指定超類。繼承了超類會繼承相應的方法,當然子類也可以重寫,在子類裡,和超類裡同名的方法就會重寫超類的方法。
| issubclass(子類名,父類名) |
可以檢查一個類是否是另外一個的子類。 當然也可以通過屬性__bases__去查看類的基類 |
| isinstance(對象名,類名) |
可以檢查一個對象是否是一個類的執行個體 可以通過屬性__class__查看對象屬於哪個類 |
子類也可以繼承多個超類,這叫多重繼承。
class Test(object1,object2): xxxx
值得注意的是,當繼承的多個超類裡含有名字相同的方法,先繼承的類中的方法會重寫後繼承的勒種的方法。
?
Python學習--類和對象