用戶: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 模塊文檔。
abc
編輯抽象基類(Abstract Base Class) 是 Python 用於設置數據標準的工具。比如以下代碼:
from abc import ABC, abstractmethod
class CanAdd(ABC):
@abstractmethod
def __add__(self, others):
...
在設置了這個抽象基類,並在抽象基類中定義了抽象方法 __add__ 過後。就可以使用:
isinstanse(obj, CanAdd)
來判斷實例 obj 是否具有 __add__ 方法。這與之前介紹 isinstanse 或 issubclass 函數時不同,此時並不需要 obj 所屬的類型是 CanAdd 的子類型。
這種方法設置出來的數據標準易於閱讀,想要支持對應的標準,只需要打開對應抽象基類的代碼文件,從上往下逐條實現對應的內容即可。
備註:抽象基類與實例
編輯抽象基類與基類(Base Class,在之前章節稱之為父類型)是完全不同的。抽象基類應當只被用於設置數據標準,而不應當被用於創建實例。並且,抽象基類的子類型也應當是抽象基類。
由於上面提到 isinstanse 或 issubclass 函數「不需要 obj 所屬的類型是 CanAdd 的子類型」,讀者也完全不應當把抽象基類作為自己類型的父類型。