Python 類詳解 [OOP][Python 類的定義][Python 創建類對象][Python 類對象的使用]

您的“關注”和“點贊”,是信任,是認可,是支持,是動力…

如意見相佐,可留言。
本人必將竭盡全力試圖做到準確和全面,終其一生進行修改補充更新。

1 Python 類的定義

在 Python 中定義類需要實用class關鍵字,格式如下所示:

class 類名:
	類屬性...
	類方法...

對以上格式說明,

  • class:此關鍵字是必需的。
  • 類名:類名本質上就是一個標識符,因此,在給類起名字時,必須讓其符合 Python 標識符命名規則。還要考慮可讀性問題,類名最好能體現出該類的功能。如果類名由多個字母或單詞組成,每個單詞的首字母大寫,其它字母小寫。
  • ::類名後的冒號是必需的。告訴 Python 解釋器,要開始編寫類屬性和類方法了。
  • 類屬性和類方法:都不是必需的,可有可無。請參見《Python 類中的變量(或屬性)分類以及特點詳解》
  • Python 類中的屬性和方法所在的位置是任意的,它們之間並沒有固定的前後次序。
  • 同屬一個類的所有類屬性和類方法,要保持統一的縮進格式。

舉例如下所示:

例一,

# 定義類
class Person:
    # 定義類屬性
    name = '碼農阿杰'
    age = 18
    
    # 定義類方法
    def say(self):
        print('Person 類中的 say() 方法。')

例二,

# 定義空類,沒有實際意義
class Demo:
    pass

例一中定義了一個 Person 類,類中有一個實例方法 say(self),其中還有個self參數。
對於實例方法,請參見博文《Python 類中的方法分類以及特點詳解》
對於 self參數,請參見博文《Python self 參數詳解》

2 Python 創建類的對象和使用

2.1 Python 類對象的創建

創建類對象的過程,又稱爲類的實例化。

類的實例化,其語法格式如下所示:

類名(參數)

舉例如下所示:

# 定義類
class Person:
    # 定義類屬性
    name = '碼農阿杰'
    age = 18

    # 定義實例方法
    def say(self):
        print('Person 類中的 say() 方法。')


person = Person()  # 類的實例化:創建類的對象

2.2 Python 類對象的使用

(1)類對象訪問變量或方法

類對象訪問類中實例變量的語法格式如下所示:

類對象名.變量名

類對象調用類中方法的語法格式如下所示:

對象名.方法名(參數)

舉例如下所示:

# 定義類
class Person:
    # 定義類屬性
    name = '碼農阿杰'
    age = 18

    # 定義實例方法
    def say(self):
        print('Person 類中的 say() 方法。')


person = Person()  # 類的實例化:創建類的對象

# 輸出 name、age 實例變量的值到控制檯
print(person.name)
print(person.age)

# 修改實例變量的值
person.name = '阿杰'
person.age = 28
print('修改後實例變量的值:', person.name, person.age)

# 調用實例方法
person.say()

運行結果:

碼農阿杰
18
修改後實例變量的值: 阿杰 28
Person 類中的 say() 方法。

(2)給類對象動態添加、刪除變量

舉例如下所示:

# 定義類
class Person:
    # 定義類屬性
    name = '碼農阿杰'
    age = 18

    # 定義實例方法
    def say(self):
        print('Person 類中的 say() 方法。')


person = Person()  # 類的實例化:創建類的對象

# 爲類對象動態添加兩個實例變量 gender、num
person.gender = '男'
person.num = 1314

# 打印爲類對象動態添加的兩個實例變量 gender、num 的值
print(person.gender)
print(person.num)

# 使用 del 語句動態刪除類對象的實例變量
del person.gender

# 打印進行測試,是否刪除成功。如果刪除成功,會報錯。
print(person.gender)

運行結果:

1314
Traceback (most recent call last):
  File "D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py", line 26, in <module>
    print(person.gender)
AttributeError: 'Person' object has no attribute 'gender'

(3)給類對象動態添加方法

注意:爲對象動態增加的方法,Python 不會自動將調用者自動綁定到所添加方法的第一個參數(通常爲 self),需要手動綁定。
對於 self 參數,請參見博文《Python self 參數詳解》

舉例如下所示:

例一,

# 定義類
class Person:
    # 定義類屬性
    name = '碼農阿杰'
    age = 18

    # 定義實例方法
    def say(self):
        print('Person 類中的 say() 方法。')


person = Person()  # 類的實例化:創建類的對象


# 先準備一個方法
def add(self):
    print('add() 函數。')


# 爲 person 對象動態添加 info 方法。把事先準備好的 add(self) 方法賦值給 info。
person.info = add  # 動態綁定方法。也可以使用 lambda 表達式來寫,因爲事先準備的 add(self) 方法只有一行代碼
person.info(person)  # 手動將調用者綁定到所添加方法的第一個參數

運行結果:

add() 函數。

例二,還可以藉助 types 模塊下的 MethodType 來實現

# 定義類
class Person:
    # 定義類屬性
    name = '碼農阿杰'
    age = 18

    # 定義實例方法
    def say(self):
        print('Person 類中的 say() 方法。')


person = Person()  # 類的實例化:創建類的對象


# 先準備一個方法
def add(self):
    print('add() 函數。')


# 爲 person 對象動態添加 info 方法。把事先準備好的 add(self) 方法賦值給 info。
# person.info = add  # 動態綁定方法
# person.info(person)  # 手動將調用者綁定到所添加方法的第一個參數

# 使用 types 模塊下的 MethodType 實現動態綁定方法和手動將調用者綁定到所添加方法的第一個參數
from types import MethodType
person.info = MethodType(add, person)  # 已經將該函數的 self 參數綁定爲 person

person.info()  # 調用添加的方法

運行結果:

add() 函數。

【友情鏈接】

微信公衆號:碼農阿杰

博客園

【參考資料】

Python 官網

Python 3.8.2 documentation

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章