簡體   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