簡體   English   中英

從未傳遞到 __init__ 方法的 class 繼承屬性

[英]Inherit attribute from class that is isn't passed into __init__ method

好的,假設我正在制作一個 class 和一個孩子 class ,如下所示:

class A:
    def __init__(self, list1=[], list2=[]):
        self.list1 = []
        self.list2 = []

class B(A):
    def __init__(self, list2=[]):
       super().__init__(list2)

但是,有沒有辦法像這樣實現它

class A:
    def __init__(self):
        self.list1 = []
        self.list2 = []

class B(A):
    # code here to inherit list1 or list2 from class A

基本上,一種實現它的方法,因此用戶不能為 list1 和 list2 提供值(它們將被初始化為空列表,用戶可以稍后使用某種方法添加元素)並讓 class B 從 class A 繼承一個列表

我覺得除了我的解決方法之外還有其他方法可以做到這一點,但可能不是因為這是一個非常具體的問題

您提供的代碼已經完成了您希望它執行的操作。

class A:
    def __init__(self):
        self.list1 = []
        self.list2 = []

class B(A):
    pass

b = B()

print(b.list1)  # prints []

當你繼承 class 時,你繼承了它的所有方法,包括__init__ 因此,在初始化B時(隱式)調用A.__init__ 大致相當於

class A:
    def __init__(self):
        self.list1 = []
        self.list2 = []

class B(A):
    def __init__(self):
        super().__init__()

這意味着(幾乎)相同的事情。 你永遠不會為了更明確而這樣做; 如果您想向B.__init__添加A.__init__不應該有的行為,您只會這樣做。

您的代碼已經完成了您想要的操作:

class A:
    def __init__(self):
        self.list1 = []
        self.list2 = []

class B(A):
    # code here to inherit list1 or list2 from class A
    def __init__(self):
        super().__init__() # <- This calls class A init function which creates the two empty lists

您的代碼對用戶提供的列表沒有任何作用。 我想你的意思是:

class A:
    def __init__(self, list1=[], list2=[]):
        self.list1 = list1
        self.list2 = list2

class B(A):
    def __init__(self, list2=[]):
       super().__init__(list2=list2)

如果你想從 class A 繼承 class B 中的列表,你的代碼必須如下:

class A:
    def __init__(self):
        self.list1 = []
        self.list2 = []

class B(A):
    pass

對於列表的修改,提供一個設置器function:

class A:
    def __init__(self):
        self.list1 = []
        self.list2 = []
    def set_list1(list):
        self.list1 = list
    def set_list2(list):
        self.list2 = list

class B(A):
    pass

暫無
暫無

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

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