1. 程式人生 > >python 面向對象二 類和實例

python 面向對象二 類和實例

else 關鍵字 根據 不同 實例變量 elif sel student pytho

一、類和實例

面向對象最重要的概念就是類(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

屬性和age屬性:

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 面向對象二 類和實例