python 面向對象二 類和實例
一、類和實例
面向對象最重要的概念就是類(Class)和實例(Instance),必須牢記類是抽象的模板,比如Student類,而實例是根據類創建出來的一個個具體的“對象”,每個對象都擁有相同的方法,但各自的數據可能不同。
1 >>> class Student(object): 2 ... pass 3 ...
在Python中,定義類是通過class
關鍵字,class
後面緊接著是類名,即Student
,類名通常是大寫開頭的單詞,緊接著是(object)
,表示該類是從哪個類繼承下來的,繼承的概念我們後面再講,通常,如果沒有合適的繼承類,就使用object
類,這是所有類最終都會繼承的類。
定義好了Student
類,就可以根據Student
類創建出Student
的實例,創建實例是通過類名+()實現的:
1 >>> st1 = Student() 2 >>> st1 3 <__main__.Student object at 0x1014b2320> 4 >>> Student 5 <class ‘__main__.Student‘>
可以看到,變量st1指向的就是一個Student
的實例,後面的0x1014b2320
是內存地址,每個object的地址都不一樣,而Student
本身則是一個類。
二、實例屬性
可以自由地給一個實例變量綁定屬性,比如,給實例st1綁定一個name
1 >>> st1.name = ‘Jack‘ 2 >>> st1.age = 28 3 >>> st1.name 4 ‘Jack‘ 5 >>> st1.age 6 28
三、__init__()函數
由於類可以起到模板的作用,因此,可以在創建實例的時候,把一些我們認為必須綁定的屬性強制填寫進去。通過定義一個特殊的__init__
方法,在創建實例的時候,就把name
,age等屬性綁上去:
1 >>> class Student(object): 2 ... def __init__(self, name, age): 3 ... self.name = name 4 ... self.age = age 5 ... 6 >>> st1 = Student(‘Mick‘, 20) 7 >>> st1.name 8 ‘Mick‘ 9 >>> st1.age 10 20
註意到__init__
方法的第一個參數永遠是self
,表示創建的實例本身,因此,在__init__
方法內部,就可以把各種屬性綁定到self
,因為self
就指向創建的實例本身。
有了__init__
方法,在創建實例的時候,就不能傳入空的參數了,必須傳入與__init__
方法匹配的參數,但self
不需要傳,Python解釋器自己會把實例變量傳進去。
和普通的函數相比,在類中定義的函數只有一點不同,就是第一個參數永遠是實例變量self
,並且,調用時,不用傳遞該參數。除此之外,類的方法和普通函數沒有什麽區別,所以,你仍然可以用默認參數、可變參數、關鍵字參數和命名關鍵字參數。
四、數據封裝
在Student
類的內部定義訪問數據的函數,這樣,就把“數據”給封裝起來了。這些封裝數據的函數是和Student
類本身是關聯起來的,我們稱之為類的方法:
1 class Student(object): 2 3 def __init__(self, name, score): 4 self.name = name 5 self.score = score 6 7 def print_score(self): 8 print(‘%s: %s‘ % (self.name, self.score))
1 >>>st1 = Student(‘Jack‘, 59) 2 >>> st1.print_score() 3 Jack: 59
類的方法封裝數據和邏輯,只需要調用就可以了,不用知道實現方式。
使用類可以方便添加新的方法。
1 class Student(object): 2 ... 3 4 def get_grade(self): 5 if self.score >= 90: 6 return ‘A‘ 7 elif self.score >= 60: 8 return ‘B‘ 9 else: 10 return ‘C‘
python 面向對象二 類和實例