代码片段展示
使用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进行查询,返回所有用户