Python 现代开发学习笔记

(五)类方法与静态方法

希望从 Python|小林 这样的文本建立一本书,处理步骤包括拆分字段、清理空白和创建实例。可以给类提供另一种创建入口:

# classmethod 接收类对象 cls;staticmethod 不额外补入实例或类。
class Book:
    def __init__(self, title, author):
        self.title = title
        self.author = author

    @staticmethod
    def clean_title(text):
        return text.strip()

    @classmethod
    def from_line(cls, line):
        title, author = line.split("|", maxsplit=1)
        return cls(cls.clean_title(title), author.strip())


book = Book.from_line(" Python | 小林 ")
print(book.title, book.author)
print(Book.clean_title(" NumPy "))

得到 Python 小林 与 NumPy。本例文本由书名、一个分隔符和作者组成。调用 Book.from_line(...) 时,cls 自动接收 Book 类对象,最后的 cls(...) 再创建实例。静态方法接收写出的实参,不自动接收 self 或 cls。

写法 自动安排的第一个实参 适合本例的工作
普通实例方法 当前实例 self 修改某一本书的状态
@classmethod 调用所关联的类 cls 从其他形式的数据创建实例
@staticmethod 无 清理书名这样的相关小工具
实例方法、类方法与静态方法的参数来源

self 与 cls 都是惯用名称,绑定方式由方法种类决定。静态方法也可以写成模块函数;放在类中,是把与这类记录有关的工具集中到一个名称下。后面通过子类调用 from_line 时,cls 可以接收子类,沿用同一个创建入口。内置方法装饰器

笔记正文与全部题解 · Ctrl / ⌘ K