将动态属性添加到类而不是实例

时间:2019-11-15 22:17:03

标签: python python-3.x

我正在寻找一种将动态属性添加到类(而不是实例)的方法。像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实例之后,该方法才有效。

1 个答案:

答案 0 :(得分:2)

您可以将__init_subclass__用于此目的:

class BaseModel:
    def __init_subclass__(cls):
        cls.manager = Manager(cls.Meta.table_name)