User: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 的子类型”,读者也完全不应当把抽象基类作为自己类型的父类型。