天天看點

學習日記12(類和對象)python學習日記12(類和對象)

python學習日記12(類和對象)

類和對象

類和對象是面向對象程式設計的兩個核心概念。

​ 類是一種抽象概念,是對一系列具有相同特征或行為的事物的統稱。不可直接使用。

  • 類中的特征具象化就是一個變量,稱為類的屬性
  • 類中的行為具象化就是一個函數,稱為類的方法
  • 類本質就由一些列屬性和方法構成的抽象概念

對象

​ 對象是由類建立出來的具體執行個體,可直接進行使用。

​ 對象由那個類建立,就擁有那個類中定義的屬性和方法。

類和對象的關系

  • 類是模闆,對象根據類這個模闆進行建立,是以先有類再有對象;
  • 根據一個類可以建立多個對象;
  • 類中定義的屬性和方法,根據該類建立出來的對象就會擁有這些屬性和方法;
  • 不同對象的屬性值會有所不同

面向對象基本文法

​ 在python中,對象幾乎是無處不在,可使用

dir

内置函數來檢視對象擁有的方法。

定義簡單的類

class 類名:
    def 方法1(self,參數清單):
        pass
    def 方法2(self,參數清單):
        pass
           

根據類建立執行個體化對象

當一個類定義完成之後,要使用這個類來建立對象,文法格式如下:

對象變量名 = 類名()

類中的

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

可以省略嗎?

​ 在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

在定義時不可以省略。