上篇我們已經學習了python中的類,并且學習到可以通過class關鍵字定義類,而類的最基本特性就是它是一個名稱空間,本篇將會學習類的實例化。
文章目錄
- 1. 類的實例化
- 1.1__init__函數
- 1.2 實例化流程
- 2. 類方法與成員
1. 類的實例化
上篇中新定義的類,不僅可以作為名稱空間使用,實際上還可以像函數那樣調用
In [1]: class Dog:...: x = 5...: def fun1(arg1,arg2):...: print(arg1,arg2)...:...: if __name__ == "__main__":...: Dog.fun1("brothers", "666")...:
brothers 666In [2]: Dog() #實例化對象
Out[2]: <__main__.Dog at 0x213762e82b0>
以上,調用Dog()
的過程,我們稱作類的實例化,了解類的實例化,要先了解類和對象的關系。
簡單而言,類就想是一個“模具”,而”對象”是由模具生產的各個具體的“東西"
比如,汽車廠的生產線上,有車模具,根據車的模具,可以制作出很多具體的車。
以上,模具就是”類”,具體的車,就是依照”類”生成的對象
只不過,以上的Dog類內部沒有任何東西,我們需要結合一個特殊的__int__函數,才能夠使得對象的實例化有意義。
1.1__init__函數
我們進一步豐富Dog類,通過定義’init’方法:
In [3]: class Dog:...: def __init__(self,arg_name,arg_age):...: self.name = arg_name...: self.age = arg_age...:...: if __name__ == "__main__":...: dog1 = Dog("旺財",5)...: dog2 = Dog("小強",6)...:In [4]: dog1
Out[4]: <__main__.Dog at 0x21376553670>In [5]: dog2
Out[5]: <__main__.Dog at 0x21376553ee0>In [6]: dog1.name
Out[6]: '旺財'In [7]: dog2.name
Out[7]: '小強'
以上代碼展示了,我們使用Dog類,實例化得到了具體的2個object(“旺財”,“小強”)
1.2 實例化流程
實際上,當我們調用’Dog’時,內部會發生以下幾個事情:
- python會創造一個空白的“object”
- python會自動調用’init’方法,并且把以上的空白object,當作第一個參數’self’,傳遞給’init’
- 因為我們的’init’中包含了’self.xx = yy’這類代碼,因此就完成了初始化
2. 類方法與成員
類作為特殊的名稱空間,使得類中定義的函數就變得比較特殊。因此,我們以后將類中定義的函數,稱為方法(method).
之所以特殊對待,是因為類方法的調用過程比較特殊。
class Dog:def __init__(self,arg_name,arg_age):self.name = arg_nameself.age = arg_agedef introduce(self):print("我是",self.name,"年齡",self.age)if __name__ == "__main__":dog1 = Dog("旺財",5)dog2 = Dog("小強",6)dog1.introduce() #等價于dog1.introduce(dog1)dog2.introduce()
可以看出,類的方法調用語法:
實例化對象.<方法名>()
之所以我們沒有顯示傳遞"self"對應的實參,是因為python其實會偷偷將.
之前的實例化對象,作為self傳遞。
3. 學習視頻地址:類的實例化、類方法