TypeError:'node'对象不可调用

时间:2015-10-01 05:54:15

标签: python object tree typeerror callable

当我尝试获取上一个节点时,收到错误(TypeError: 'node' object is not callable)。我做错了什么?

我的节点类:

class node(object):
    def __init__(self):
        self.node=[]
        self.info = None
        self.prev = None
        self.depth=-1
        self.step = []
    def prev(self):
        return self.prev
    def add(self):
        node1=node()
        self.node.append(node1)
        node1.prev=self
        return node1

我的代码访问prevlast_node的深度值应为5左右):

rev = last_node
dep = rev.depth
revPath = [None]*(dep*4)
for g in range(0,dep):
    revPath[dep - (g*4) - 1] = rev.step[3]
    revPath[dep - (g*4) - 2] = rev.step[2]
    revPath[dep - (g*4) - 3] = rev.step[1]
    revPath[dep - (g*4) - 4] = rev.step[0]
    rev = rev.prev()

其他信息:

我试图向后遍历树,以便查看所采取的路径。 step[]值只能抓取几个整数。除了prev之外的所有代码,代码也运行正常(即如果我取出部分找到所采用的路径,则没有问题。)

1 个答案:

答案 0 :(得分:0)

您已在类中定义了一个名为prev的方法,但在您的构造函数中,您将None分配给self.prev,然后在add中为其分配再次使用node实例。

因此,当您尝试调用rev.prev()时,该方法已被覆盖,并且您实际上是在尝试调用node对象,因此会出错。

Python中常规(请参阅PEP-0008)将私有字段(客户端代码不应使用的字段)作为下划线的前缀,如下所示:

def __init__(self):
    self._node=[]
    self._prev = None
    # Etc.

以小写命名您的类也是有风险的,因为任何名为node的变量都会遮挡它并使其无法访问。 Python中的约定是对类名使用Pascal大小写(以大写字母开头)(再次参见PEP-0008)。