我遇到了python继承问题。
这个例子只概述了层次结构,因为我不能在这里发布更复杂的代码,所以请耐心等待我提供所需的所有细节。
我定义了两个类:
class A(pydot.Node):
def __init__(self):
# do some init
pydot.Node.__init__(self)
def very_useful_method(self):
return self._valuable_property
class B(A):
def __init__(self):
# do some initialization
A.__init__(self)
if "__main__" == __name__
# some code that uses add_node and get_nodes
retrieved_b_instance.very_useful_method() #error, **Node** object has no attribute very_useful_method...
我非常确信我没有得到正确的继承过程,并且我对__init__
调用做错了。
我正在使用python 2.7。
有什么建议吗?
跟踪:
Traceback (most recent call last):
File "/home/reuts/PycharmProjects/AI4/Ex4_pydot.py", line 399, in <module>
driver.interact()
File "/home/reuts/PycharmProjects/AI4/Ex4_pydot.py", line 362, in interact
self.parse_command(cmd)
File "/home/reuts/PycharmProjects/AI4/Ex4_pydot.py", line 354, in parse_command
options[args[0]]()
File "/home/reuts/PycharmProjects/AI4/Ex4_pydot.py", line 344, in print_report
print "node cpt: %s" % node.get_cpt()
AttributeError: 'Node' object has no attribute 'get_cpt'
Node是pydot实现的基类(pydot.Node),最重要的是我继承了pydot.Node时还有两个类。
我现在已经检查了pydot.py中的代码,我怀疑那里有转换。来自Java和静态类型的背景我很难理解get_node_list()中的操作及其对返回实例类型的影响。
答案 0 :(得分:1)
我可能发现了错误。显然pydot.Node
有一个方法无法返回我的预期(pydot
是图表实现)。
实际节点存储为字符串,get_nodes()
方法为每个get_nodes
调用重新生成,这会导致pydot.Node
的任何扩展如果稍后通过get_nodes
使用,则该类几乎毫无意义。
更新:解决方法
我发现在与实现交互时保存数据的方法是使用Node
实例的obj_dict
属性,该属性通过图形的obj_dict['nodes']
obj_dict
元素进行恢复(为所有添加的节点保存...)