gpt4 book ai didi

python - 为什么显示 TypeError : 'cluster' object is not callable even when callable(cluster) gives true

转载 作者:太空宇宙 更新时间:2023-11-03 15:39:49 29 4
gpt4 key购买 nike

以下是我的类定义:

class logline:
def __init__(self,t,cmp,msg):
self.t = t
self.cmp = cmp
self.msg = msg

class cluster:
clusters = []
def __init__(self,status,log):
self.status = status
self.children = []
self.eventlogs = []
self.rep_msg = log.msg
self.addLog(log)
self.prev = None
if(status == 'root'):
cluster.clusters.append(self)
def prev(self):
return self.prev
def print_children(self):
for child in range(0,len(self.children)):
print(self.children[child].rep_msg)
self.children[child].print_logs()
def print_logs(self):
for log in self.eventlogs:
print(log.msg)
def add_child(self,status,log):
temp = cluster(status,log)
self.children.append(temp)
temp.prev=self
return temp
def addLog(self,log):
self.eventlogs.append(log)

现在,树是我的根集群节点

tree = cluster('root',log1)

prev 是我添加到树中的子集群节点

tree = tree.add_child('child',log6)

当我尝试时:tree = tree.prev()我应该找回树,但它给了我错误:

tree = tree.prev()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'cluster' object is not callable

另一方面:可调用(集群)评估结果为真

我的类定义基于:How can I implement a tree in Python? Are there any built in data structures in Python like in Java?

我四处寻找,但似乎找不到任何符合我情况的东西

提前致谢

编辑:所以,我是 python 的绝对初学者,我应该以此为主导

>>> print(tree)
<__main__.cluster object at 0x02AF8590>
>>> print(tree.prev)
<__main__.cluster object at 0x02AEA270>

我假设因为我得到了两个语句的不同位置,所以 prev 已设置为某个值但我无法返回到我的父节点
返回 self.prev

最佳答案

cluster 类本身是可调用的:当您调用它时,它会返回该类的一个实例。但是,类的实例不可调用。但是(您可能会问)为什么您的代码甚至尝试调用该类的实例

嗯,这是因为 .add_child 方法返回新的 temp 实例,但它将 temp.prev 属性设置为 self,父实例。这会覆盖该实例的 .prev 方法。因此,当您执行 tree.prev() 时,它会尝试调用该父实例而不是 prev 方法。

顺便说一句,cluster.__init__ 方法还将 .prev 方法替换为 None

所以你需要消除这个名称冲突。我建议您将该属性重命名为 ._prev

关于python - 为什么显示 TypeError : 'cluster' object is not callable even when callable(cluster) gives true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42244090/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com