代码之家  ›  专栏  ›  技术社区  ›  F-22 Destroyer

遇到super()问题

  •  0
  • F-22 Destroyer  · 技术社区  · 1 年前

    我有两个单继承类,旨在作为一个简单的树实现:

    class tree:
        def __init__(self, nodes = set()):
            self.nodes = nodes
    
        def addnode(self, node):
            self.nodes.add(node)
    
    class Node(tree):
        def __init__(self, name = '1', data = None, children = set()):
            self.data = data
            self.children = children
            self.name = name
        
            super().addnode(self)
    
    tree()
    Node('1')
    

    但是,运行此代码会返回错误:

        self.nodes.add(node)
        ^^^^^^^^^^
    AttributeError: 'Node' object has no attribute 'nodes'
    

    我找不到任何资源来回答这个具体问题。有人能帮帮我吗?

    1 回复  |  直到 1 年前
        1
  •  1
  •   Flow    1 年前
    class tree:
        def __init__(self, nodes=None):
            if nodes is None:
                nodes = set()
            self.nodes = nodes
    
        def addnode(self, node):
            self.nodes.add(node)
    
    
    class Node(tree):
        def __init__(self, name='1', data=None, children=None):
            super().__init__()
            if children is None:
                children = set()
            self.data = data
            self.children = children
            self.name = name
    
            super().addnode(self)
    
    
    tree()
    Node('1')
    

    您需要初始化父类才能使用它。

    有关更多信息,请查看: What does 'super' do in Python? - difference between super().__init__() and explicit superclass __init__()