類和對象,主要是學習【面向對象編程】了,這種編程方法中,用戶可以自定義類型來同時對代碼和數據進行整理。
一,用戶自定義類型
Python 有很多的內置類型,現在我們來自定義一個新的類型。
比如,創建一個叫 Point 的類,用於表示一個二維空間中的點。
數學符號上對點的表述一般是一個括號內有兩個坐標,坐標用逗號分隔開。比如,(0,0)就表示為原點,(x,y)就表示了該點從原點向右偏移 x,向上偏移 y。
事實上,我們可以用好幾種方法來在 Python 中表示一個點:
• 可以把坐標存儲成兩個單獨的值,x 和 y。
• 可以把坐標存儲成列表或者元組的元素。
• 可以創建一個新的類型,用對象來表示點。
1.用戶自定義的類型也被叫做一個類,如下所示:
>>> class Point:
... """Represents a point in 2-D space."""
...
頭部代碼的意思是表示新建的類名字叫 Point。然后類的體內有一個文檔字符串,解釋類的用途。在類的定義內部可以定義各種變量和方法。
聲明一個名為 Point 的類,就可以創建該類的一個對象:
>>> Point
<class '__main__.Point'>
因為 Point 是在頂層位置定義的,所以全名就是__main__.Point。
2.類的對象就像是一個創建對象的工廠。創建一個 Point,就可以像調用函數一樣調用 Point。
>>> blank = Point()
>>> blank
<__main__.Point object at 0x10abe71d0>
返回值是到一個 Point 對象的引用,剛剛賦值為空白了。
創建一個新的對象也叫做實例化,這個對象就是類的一個實例。
用 Print 輸出一個實例的時候,Python 會告訴你該實例所屬的類,以及在內存中存儲的位置 (前綴為0x 意味十六進制)
每一個對象都是某一個類的一個實例,所以【對象】和【實例】可以互換來使用。談論用戶自定義類型的時候,使用【實例】這個詞更貼切一點。
二,屬性
1.用點號可以給實例進行賦值:
>>> blank.x = 3.0
>>> blank.y = 4.0
這一語法形式就和從模塊中選取變量的語法是相似的,比如 math.pi 或者 string.whitespace。
然而在本例中,我們用點號實現的,是對一個對象中某些特定名稱的元素進行賦值,這些元素也叫做屬性。
用於展示一個類及其屬性的狀態圖也叫做類圖,下面的圖表展示了上面這些賦值的結果:
變量 blank 指代的是一個 Point 對象,該對象包含兩個屬性x和y,每個屬性都指代了一個浮點數。
讀取屬性值可以用如下這樣的語法:
>>> blank.y
3.0
>>> y = blank.y
>>> y
3.0
這里的表達式 blank.y 的意思是,到 blank 所指代的對象中,讀取 y 的值。
在這個例子中,我們把這個值賦值給一個名為 y 的變量。這里的變量 y 和類的屬性y 並不沖突。
2.另外,點號可以隨意在任意表達式中使用,比如:
>>> blank.x = 3.0
>>> blank.y = 4.0
>>> '(%g, %g)' % (blank.x, blank.y)
'(3, 4)'
>>> import math
>>> distance = math.sqrt(blank.x**2 + blank.y**2)
>>> distance
5.0
3.我們還可以把實例作為一個參數來使用,比如:
>>> def print_point(p):
... print('(%g, %g)' % (p.x, p.y))
...
>>> print_point(blank)
(3, 4)
這個例子中,print_point 這個函數就接收了一個點作為參數,然后顯示點的平面數值位置。
在函數內部,p 是blank 的一個別名;所以,如果函數內部對 p 進行了修改,blank 也會發生相應的改變。
結束。