跳转到内容

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 模块文档。

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