Python递归类引用 - 如何创建树

时间:2014-07-23 16:21:25

标签: python django django-models

这有什么问题?

class Cat():
    parent = Cat()
  

NameError:name' Cat'未定义

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

我最终将把它作为模型放在Django中并与SQLite3同步。我是一个Python新手。遗憾...

3 个答案:

答案 0 :(得分:3)

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

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

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

你可能想要的是这样的:

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

答案 1 :(得分:1)

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

Cat(Cat("dog"))

可能?

答案 2 :(得分:1)

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

幸运的是,存在一个非常好的弹簧分层数据算法,即MPTT,以及一个很好的Django实现,django-mptt