1. bases
class Child(Parent1, Parent2): ... → bases = (Parent1, Parent2)⚠️ 注意:如果类没有任何显式父类(如
class X: pass),bases = (object,)(Python 3 中所有类都隐式继承object)
2. bases and ...
bases 是空元组(比如 ()),那么 bases 为假值 → 整个条件为 False,跳过后面的检查bases 非空(比如 (Parent,)),则继续判断后面的 not any(...)✅ 实际上在 Python 3 中
bases永远不会为空(至少有(object,)),所以这个bases and更多是防御性编程(兼容性或特殊场景)。
3. any(issubclass(b, Model) for b in bases)
这是核心!我们从里往外看:
▶ for b in bases
bases 中的每一个父类 b▶ issubclass(b, Model)
b 是否是 Model 的子类(包括 b is Model 本身)1issubclass(Model, Model)# True(自己是自己的子类)2issubclass(Child, Model)# True(如果 Child 继承 Model)3issubclass(str, Model)# False
▶ any(...)
b 满足 issubclass(b, Model),any(...) 就返回 TrueFalse💡 所以
any(...)的意思是:“bases 中有没有任何一个类是 Model 或其子类?”
4. not any(...)
any(...) == True → not True == Falseany(...) == False → not False == TrueDjango、SQLAlchemy 等框架的常见模式:强制用户继承某个基类,才能获得框架功能。
class BaseModel: def save(self): print("Saving to DB...") class ORMType(type): def __new__(cls, name, bases, dct): if name != "BaseModel" and not any(issubclass(b, BaseModel) for b in bases): raise TypeError("所有模型必须继承 BaseModel") return super().__new__(cls, name, bases, dct) class User(BaseModel, metaclass=ORMType): # ✅ pass class Config(metaclass=ORMType): # ❌ 不是模型,报错 pass
数据库 ORM 模型