簡體   English   中英

擴展Python類的init方法

[英]Extend Python class's init method

我有一個BaseClass和一個從BaseClass繼承的AbstractClass 這是我所擁有的結構

class BaseClass(object):
    def __init__(self, initialize=True):
        self.name = 'base_class'
        self.start = 0
        if initialize:
            self.start = 100

class AbstractClass(BaseClass):
    def __init__(self):
        self.name = 'asbtract_class'
        super(BaseClass, self).__init__()

我想通過抽象類的initialize是被轉移到基類的參數,如果True設置對象的start100

我嘗試使用super(BaseClass, self).__init__()但是抽象類沒有start屬性。 嘗試訪問它時出現錯誤。

我如何將initialize參數的值傳遞給AbstractClass並使用BaseClass__init__方法設置AbstractClassstart屬性。

我使用的代碼

best = BaseClass()
abs = AbstractClass()
abs.start # AttributeError: 'AbstractClass' object has no attribute 'start'

要調用超類的構造函數,您應該使用子類的類名而不是超類,即:

class AbstractClass(BaseClass):
    def __init__(self):
        super(AbstractClass, self).__init__()
        self.name = 'abstract_class'

還要注意,我更改了調用超類的構造函數和設置name屬性的順序。 如果在調用super之前進行設置,則該屬性將被super類的構造函數覆蓋,這很可能不是您想要的

正如@Sraw所指出的,對於python 3,調用super的表示不再需要引用類名,並且可以簡化為

class AbstractClass(BaseClass):
    def __init__(self):
        super().__init__()

暫無
暫無

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

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