跳至內容

用戶:Xyy23330121/Python/類/延申閱讀

來自維基學院

本頁面將提供一些延申閱讀。

dataclass

[編輯 | 編輯原始碼]

Python 內置的 dataclasses 模塊提供了一種利用類實例來簡單地處理信息的方法。具體來講,該模塊的 dataclass 裝飾器可以按照設置自動在類型中添加比如 __init__ __repr__ __eq__等方法,來支持實例初始化、字符串輸出、實例之間比較、哈希運算、將實例屬性設為只讀等。 比如下面代碼:

from dataclasses import dataclass

@dataclass
class People:
    name: str
    email: str
    age: int = 0

其中,@dataclass 裝飾器為 People 類添加了包括下面方法在內的多個方法:

def __init__(self, name: str, email: str, age: int = 0):
    self.name = name
    self.email = email
    self.age = age

更多內容請參見 Python dataclass 模塊文檔。

抽象基類Abstract Base Class) 是 Python 用於設置數據標準的工具。比如以下代碼:

from abc import ABC, abstractmethod

class CanAdd(ABC):
    @abstractmethod
    def __add__(self, others):
        ...

在設置了這個抽象基類,並在抽象基類中定義了抽象方法 __add__ 過後。就可以使用:

isinstanse(obj, CanAdd)

來判斷實例 obj 是否具有 __add__ 方法。這與之前介紹 isinstanseissubclass 函數時不同,此時並不需要 obj 所屬的類型是 CanAdd 的子類型。

這種方法設置出來的數據標準易於閱讀,想要支持對應的標準,只需要打開對應抽象基類的代碼文件,從上往下逐條實現對應的內容即可。

備註:抽象基類與實例

[編輯 | 編輯原始碼]

抽象基類與基類(Base Class,在之前章節稱之為父類型)是完全不同的。抽象基類應當只被用於設置數據標準,而不應當被用於創建實例。並且,抽象基類的子類型也應當是抽象基類。

由於上面提到 isinstanseissubclass 函數「不需要 obj 所屬的類型是 CanAdd 的子類型」,讀者也完全不應當把抽象基類作為自己類型的父類型。