
[英]list() gives TypeError: 'Node' object is not callable - BUT ONLY AFTER SOME CODES
[英]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
我的代码访问prev
( last_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.