Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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递归类参考-如何生成树_Python_Django_Django Models - Fatal编程技术网

Python递归类参考-如何生成树

Python递归类参考-如何生成树,python,django,django-models,Python,Django,Django Models,这个怎么了 class Cat(): parent = Cat() NameError:未定义名称“Cat” 我只想创建一个可以嵌套的类来创建一个类别对象树。这样做的标准方式是什么 我最终将把它作为一个模型放到Django中,并与SQLite3同步。我是Python新手。抱歉…您正在尝试在完成Cat类的定义之前创建一个Cat对象 此版本在语法上是合法的,但将创建一个无限的猫列表: class Cat(): def __init__(self): self.pa

这个怎么了

class Cat():
    parent = Cat()
NameError:未定义名称“Cat”

我只想创建一个可以嵌套的类来创建一个类别对象树。这样做的标准方式是什么


我最终将把它作为一个模型放到Django中,并与SQLite3同步。我是Python新手。抱歉…

您正在尝试在完成Cat类的定义之前创建一个
Cat
对象

此版本在语法上是合法的,但将创建一个无限的猫列表:

class Cat():
    def __init__(self):
         self.parent = Cat()
您可能想要的是这样的:

class Cat():
    def __init__(self, parent=None):
         self.parent = parent

您正在尝试在完成Cat类的定义之前创建一个
Cat
对象

此版本在语法上是合法的,但将创建一个无限的猫列表:

class Cat():
    def __init__(self):
         self.parent = Cat()
您可能想要的是这样的:

class Cat():
    def __init__(self, parent=None):
         self.parent = parent
也许吧


也许?

除了无限递归的问题外,将某个对象建模为普通类,然后再考虑如何将其转换为Django模型是一个错误。这是因为:Django模型要存储在数据库中,而关系数据库永远不会与oop概念完美匹配


幸运的是,存在一个非常好的spring分层数据算法,即MPTT,以及一个很好的Django实现。

除了无限递归的问题之外,将某个对象建模为普通类,然后再考虑如何将其转换为Django模型是一个错误。这是因为:Django模型要存储在数据库中,而关系数据库永远不会与oop概念完美匹配


幸运的是,spring分层数据有一个非常好的算法,即MPTT,以及它的一个很好的Django实现。

既然每个
Cat
的父对象都是全新的
Cat
,那么您打算如何在不无限递归的情况下实现这一点呢。这是一个副本,回答如下:简短的回答是:class Cat(self):parent=ForeignKey('self')由于每个
Cat
的父对象都是全新的
Cat
,因此您计划如何在不无限重复的情况下执行此操作?谢谢大家的回答。这是一个复制品,回答如下:简短的回答是:类Cat(self):parent=ForeignKey('self')这将无限递归,不是吗?是的。第一个版本会,但第二个版本可能是他想要的。这将无限循环,不是吗?是的。第一个版本会,但第二个版本可能是他想要的。