代码之家  ›  专栏  ›  技术社区  ›  Eduard Luca

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

  •  1
  • Eduard Luca  · 技术社区  · 5 年前

    我正在寻找一种向类(而不是实例)添加动态属性的方法。就像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 回复  |  直到 5 年前
        1
  •  2
  •   a_guest    5 年前

    你可以用 __init_subclass__ 为此目的:

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