Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何编写django类(“Models”)初始化_Python_Django - Fatal编程技术网

Python 如何编写django类(“Models”)初始化

Python 如何编写django类(“Models”)初始化,python,django,Python,Django,我有一个叫做“临时降价”的对象,它告诉我一个正在销售的产品的信息。这个类看起来像这样: class TPR: def __init__(self, product_id, territory): self.product_id = product_id self.territory = territory 在django模型中,它允许您定义init之外的内容(至少在继承模型的特定模型中)。model基类: class TPR(models.Model):

我有一个叫做“临时降价”的对象,它告诉我一个正在销售的产品的信息。这个类看起来像这样:

class TPR:
    def __init__(self, product_id, territory):
        self.product_id = product_id
        self.territory = territory
在django模型中,它允许您定义init之外的内容(至少在继承
模型的特定模型中)。model
基类:

class TPR(models.Model):
    product_id = ...
    territory = ...
基本上,我希望能够做到这一点:

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

我如何构建抽象基类这样的东西,这样我就可以在
init
(如django)之外定义东西,而不必编写init?

您所描述的是普通python的一个特性,而不是django

当您在
\uuu init\uu
中分配
self.product\u id=…
时,您正在实例中分配一个名为
product\u id
的属性

当您在类主体中分配
product\u id=…
时,您正在类中创建一个属性,
TPR.product\u id
。除非您显式分配它们,否则类的实例将不会有这样的属性。Python属性查找的工作方式是
instance.product\u id
将在类中查找缺少的属性。T这意味着所有未显式重写
产品id
的实例,例如在
\uuuu init\uuuu
中,通过类共享与其
产品id
相同的对象


关键是,您可以使用您想要的语法定义属性,而无需对基类做任何特殊的操作。

我明白了——那么,将变量放在实例
\uuuuuu init\uuuu
中,而不仅仅是放在类级别有什么优点/缺点呢?另外,我认为您忘记了完成第二个s在第二段中。@ DavID42谢谢你的注意。我已经通过解释行为上的差异来描述优点/缺点。你认为一个优势完全取决于你想要做什么。