代码片段展示

使用classmethod来实现工厂模式,多种方式创建对象

class User:
    def __init__(self, name):
        self.name = name

    @classmethod
    def from_dict(cls, data):
        return cls(data["name"])

    def show_name(self):
        return self.name

# 从init来实例化对象
# user = User("Alice")
# print(user.show_name())

# 从字典实例化对象
user = User.from_dict({"name": "Bob"})
print(user.show_name())

还可以从数据库读取配置

class Config:

    def __init__(self, host, port):
        self.host = host
        self.port = port

    @classmethod
    def from_env(cls):
        import os
        return cls(
            os.getenv("HOST"),
            int(os.getenv("PORT"))
        )

SQLAlchemy 里的 classmethod 场景

一个User类就是一张users表

from sqlalchemy.orm import declarative_base
from sqlalchemy import Column, Integer, String

Base = declarative_base()

class User(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True)
    name = Column(String)

select(User) 其实是对表users进行查询,返回所有用户

总结