繁体   English   中英

TypeError:“节点”对象不可调用

[英]TypeError: 'node' object is not 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之外,该代码还可以与其他所有程序一起正常运行(即,如果我取出零件以查找所采用的路径,则没有问题)。

您已经在类中定义了一个称为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 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM