当我尝试获取上一个节点时,收到错误(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
之外的所有代码,代码也运行正常(即如果我取出部分找到所采用的路径,则没有问题。)
答案 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)。