繁体   English   中英

如何在Python中使用不同类的实例调用类方法?

[英]How to call a class method using an instance of a different class in Python?

我试图使用两个类 - 节点和二叉树来实现二叉树。 当我插入节点(左或右)时,我使用的方法是insert_left_nodeinsert_right_node ,它们是insert_right_node class BinaryTree的方法,但我也使用class Node来创建节点。 每次插入节点后,都会返回当前对象。

现在,如何使用返回的对象 - 当前调用类BinaryTree的插入方法。 例如,在代码的第二行,语句n3 = n1.insert_left_node(33)失败,出现AttributeError: 'Node' object has no attribute 'insert_left_node'

我需要另一种方法来实现这一目标。

码:

class Node(object):
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None


class BinaryTree(object):
    def __init__(self, root=None):
        self.root = Node(root)

    def insert_left_node(self, data):
        if not self.root:
            self.root = Node(data)
        else:
            current = self.root
            while True:
                if current.left:
                    current = current.left
                else:
                    current.left = Node(data)
                    break
            return current

    def insert_right_node(self, data):
        if not self.root:
            self.root = Node(data)
        else:
            current = self.root
            while True:
                if current.right:
                    current = current.right
                else:
                    current.right = Node(data)
                    break
            return current

if __name__ == '__main__':
    r = BinaryTree(34)  # root
    n1 = r.insert_left_node(22)
    n2 = r.insert_right_node(45)
    n3 = n1.insert_left_node(33)  # Fails
    print n3

你的要求字面上没有任何意义。 要实现您想要的功能,您只需将所需的方法添加到要使用的类中即可。 尝试类似以下的内容:

class Node(object):
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None

    def insert_left_node(self, data):
        self.left = Node(data)

    def insert_right_node(self, data):
        self.right = Node(data)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM