【问题标题】:Add dynamic property to class, not instance将动态属性添加到类,而不是实例
【发布时间】:2020-03-12 02:25:38
【问题描述】:

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

【问题讨论】:

标签: python python-3.x


【解决方案1】:

您可以为此目的使用__init_subclass__:

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

【讨论】:

  • 不知道为什么我没有想到这一点。谢谢!
猜你喜欢
  • 2014-12-07
  • 2020-08-08
  • 2015-11-01
  • 2019-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多