python學習日記12(類和對象)
類和對象
類和對象是面向對象程式設計的兩個核心概念。
類
類是一種抽象概念,是對一系列具有相同特征或行為的事物的統稱。不可直接使用。
- 類中的特征具象化就是一個變量,稱為類的屬性
- 類中的行為具象化就是一個函數,稱為類的方法
- 類本質就由一些列屬性和方法構成的抽象概念
對象
對象是由類建立出來的具體執行個體,可直接進行使用。
對象由那個類建立,就擁有那個類中定義的屬性和方法。
類和對象的關系
- 類是模闆,對象根據類這個模闆進行建立,是以先有類再有對象;
- 根據一個類可以建立多個對象;
- 類中定義的屬性和方法,根據該類建立出來的對象就會擁有這些屬性和方法;
- 不同對象的屬性值會有所不同
面向對象基本文法
在python中,對象幾乎是無處不在,可使用
dir
内置函數來檢視對象擁有的方法。
定義簡單的類
class 類名:
def 方法1(self,參數清單):
pass
def 方法2(self,參數清單):
pass
根據類建立執行個體化對象
當一個類定義完成之後,要使用這個類來建立對象,文法格式如下:
對象變量名 = 類名()
類中的 self
self
self的概念
當對象調用方法,方法中的
self.屬性名
可以通路到這個對象的屬性;通過
self.方法名()
可以調用這個對象的方法。
可以了解為:
self
代表類的執行個體,而非類。
class Test:
def ppr(self):
print(self)
print(self.__class__)
t = Test()
t.ppr()
執行結果:
<__main__.Test object at 0x0000021A1E47DC88>
<class '__main__.Test'>
在日常開發中,不推薦在類的外部直接給對象添加屬性這種方式。對象應該具有哪些屬性,我們應該封裝在類的内部。
self
可以省略嗎?
self
在Python解釋器的内部,當我們調用t.ppr()時,實際上Python解釋成Test.ppr(t),也就是把self替換成了類的執行個體。
class Test:
def ppr():
print(self)
t = Test()
t.ppr()
執行結果:
Traceback (most recent call last):
File "cl.py", line 6, in <module>
t.ppr()
TypeError: ppr() takes 0 positional arguments but 1 was given
運作時提醒錯誤如下:ppr在定義時沒有參數,但是我們運作時強行傳了一個參數。
由于上面解釋過了t.ppr()等同于Test.ppr(t),是以程式提醒我們多傳了一個參數t。
這裡實際上已經部分說明了
self
在定義時不可以省略。