簡體   English   中英

如何從超類調用Subclass對象,還有更好的方法嗎? (Python 3)

[英]How can I call a Subclass object from a Superclass and is there a better way to do this? (Python 3)

我正在python(3)中創建一個游戲,並且我有一個帶有游戲循環和一堆變量的主類。 我有一個這樣的子類來創建“路徑”對象,並且我需要主類中的變量。 我還需要從主超類調用子類。 每次調用子類時,它也會調用主類的init方法來傳遞變量。 問題是,發生這種情況時,它將重置主類中所有變量的值。

class Main:
    def __init__(self):
        foo = 0 
        sub1 = Sub()

    def foo_edit(self):
        self.foo += 5

    def main(self):
        sub2 = Sub()


class Sub(Main):
    def __init__(self):
        super(Sub, self).__init__()
        self.bar = 0

    def foo_edit(self):
        self.foo += 10

我看過許多其他類似的問題,但沒有一個給我所需的答案。 我在我的代碼中(在main的init函數中)嘗試了sub1,這會導致遞歸循環錯誤,因為init函數會永遠相互調用。 當我在gameloop(或本例中的main)中調用它時,它將在每次調用Main時重新初始化Main,從而清除Sub中所需的變量。 在我只有一個“路徑”實例之前,所以我不需要類,並且有一個函數。 現在,我需要多個“路徑”對象,我正在使用main的子類來獲取所需的變量。

解決此問題的解決方案將不回答我的問題(從超類調用子類可能是個壞主意),將不勝感激。 提前致謝。

編輯:我可以將所需的變量傳遞到“ Sub”類中,但是我需要對其進行更新,因此我需要某種更新方法來確保傳入的變量在Main中時在Sub中被更改。 這很容易做到,但是我想知道是否有更容易/更好的方法。

您誤解了子類的目的。 繼承不是用於共享數據,而是用於創建通用類型的特殊情況。

如果Sub應該與Main完全一樣,但有一些專業化,那么您應該使用繼承。 當您說“ Sub”是“ Main”的子類時,您是在說“ Sub是Main”,而不是“ Sub使用Main的一部分”。

如果Sub只需要訪問Main數據,則使用組合。 如果Sub從需求數據Main ,通過的一個實例MainSub ,和具有Sub上的實例操作。

例如:

class Main():
    def __init__(self):
        self.foo = 42
        self.sub1 = Sub(self)
        self.sub1.foo_edit()
    ...

class Sub():
    def __init__(self, main):
        self.main = main

    def foo_edit(self):
        self.main.foo += 10

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM