[英]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
,通過的一個實例Main
到Sub
,和具有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.