如何编写类似django的类(“模型”)初始化

时间:2019-10-08 17:20:39

标签: python django

我有一个名为“ TemporaryPriceReduction”的对象,它告诉我有关正在销售的产品的信息。该类看起来像这样:

class TPR:
    def __init__(self, product_id, territory):
        self.product_id = product_id
        self.territory = territory

在django模型中,它允许您在init之外定义事物(至少在继承models.Model基类的特定模型中:

class TPR(models.Model):
    product_id = ...
    territory = ...

基本上,我希望能够做到这一点:

class TPR(AbstractClass):
    product_id = product_id
    territory = territory

如何构建类似于抽象基类的东西,以便我可以在init之外定义内容(例如在django中),而不必编写init?

1 个答案:

答案 0 :(得分:1)

您所描述的是纯python的功能,而不是django。

self.product_id = ...中分配__init__时,就是在名为product_id的实例中分配属性。

在类正文中分配product_id = ...时,您将在类TPR.product_id中创建一个属性。除非您明确分配它们,否则您的类的实例将没有这样的属性。 Python属性查找的工作方式是instance.product_id将在类中找到丢失的属性。这意味着所有未明确覆盖product_id的实例,例如在__init__中,通过类与其product_id共享相同的对象。

重点是,您可以使用所需的语法定义属性,而无需对基类做任何特殊的事情。