我們在前面學習的資料型別都是類,我們可以在類別中使用很多方法。
類別的定義使用的是class關鍵字,語法結構如下:
className:'''類別文件'''content
Name為我們要創建的類別的名字,注意我們在使用的時候盡量採用大寫的方式,如果採用兩個單字命名,兩個單字的首字母都採用大寫的方式。
類別文檔為我們寫入的幫助我們理解這個類別的資訊。
content為類別中的類別體,包含變數、方法和屬性等內容,如果我們在定義類別的時候暫時不需要添入內容,可以採用pass語句作為一種佔位語句。
我們來定義一個類別:
classSchool:#這種方式我們就定義了一個名為School的類別'''定義一個學校類別'''passschool=School()#透過這個方式來呼叫這個類別print(type(school))#透過輸出看一下它的型別print(school)
輸出結果為:
<class'__main__.School'><__main__.Schoolobjectat0x03372DD8>
透過結果我們可以看到school為一個類,透過第二行我們可以看出school是School類別的實例。
在建立類別的時候,往往會建立一個__init__()方法,這種方法屬於建構方法,也就是每次呼叫這個類別都會使用這個方法,參數的傳遞也是在這個方法裡。
這種方法中必須包含一個self參數,也必須是第一個參數,這個參數是指向這個實例本身的,它可以存取這個類別中存在的屬性和方法。
看下面的實例:
classSchool:#這種方式我們就定義了一個類,如果我們要呼叫這個類'''定義一個學校類'''def__init__(self):print('這裡是__init()__方法')def__judge__( self):print('判斷這個方法是否被呼叫')school=School()
輸出結果為:
這裡是__init()__方法
透過輸出我們可以看出只要呼叫了這個類別就自動呼叫了這個__init__方法,而下面的__judge__方法是沒有被呼叫的。
我們也可以透過循環的方式來驗證一下是否每次呼叫這個類別就會使用一次init方法:
看下面程式碼:
classSchool:'''定義一個學校類別'''count=0def__init__(self):School.count+=1print('這裡是__init()__方法的第%d次使用'%School.count)foriinrange(5 ):School()
輸出結果為:
這裡是__init()__方法的第1次使用這裡是__init()__方法的第2次使用這裡是__init()__方法的第3次使用這裡是__init()__方法的第4次使用這裡是__init()__方法的第5次使用
我們可以透過輸出結果看出我們使用5次init方法,當我們第一次呼叫這個類別的時候,count為0,然後透過init方法進行加1操作,在init方法裡的school.count每次進行加1,然後最外面的count是不變的,透過這個例子我們可以了解到init的使用法發。
我們在學習函數的時候,參數的傳遞是定義在函數名內的,而在類別中,我們透過init方法可以更方便的進行參數的傳遞。
看下面的例子:
classGetAge:def__init__(self,name,age):self.name=nameself.age=ageprint('%s的年齡為%d'%(name,age))GetAge('小明',18)
輸出結果為:
小明的年齡為18
我們需要注意,self是必不可少的,而且需要放在第一個,然後我們在調用這個類別的時候,init方法中所包含的參數個數(不包含self),一定是等同於我們在調用的時候實際參數傳遞的個數。