我有一个名为“ 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?
答案 0 :(得分:1)
您所描述的是纯python的功能,而不是django。
在self.product_id = ...
中分配__init__
时,就是在名为product_id
的实例中分配属性。
在类正文中分配product_id = ...
时,您将在类TPR.product_id
中创建一个属性。除非您明确分配它们,否则您的类的实例将没有这样的属性。 Python属性查找的工作方式是instance.product_id
将在类中找到丢失的属性。这意味着所有未明确覆盖product_id
的实例,例如在__init__
中,通过类与其product_id
共享相同的对象。
重点是,您可以使用所需的语法定义属性,而无需对基类做任何特殊的事情。