我正在寻找一种将动态属性添加到类(而不是实例)的方法。像Django这样的事情与模型的管理者有关。基本上,我想要实现的是:
class Manager:
def __init__(self, table_name):
self.table_name = table_name
# rest omitted for brevity
class BaseModel:
# somehow create a new instance of Manager
# and send the init param based off BaseModel's child
# class table_name Meta property
class MyModel(BaseModel):
class Meta:
table_name = 'my_table'
MyModel.manager # should return an instance of Manager(table_name='my_table')
我尝试使用构造函数(__new__
),但显然只有在创建至少一个MyModel
实例之后,该方法才有效。
答案 0 :(得分:2)
您可以将__init_subclass__
用于此目的:
class BaseModel:
def __init_subclass__(cls):
cls.manager = Manager(cls.Meta.table_name)