[英]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
設置對象的start
值100
。
我嘗試使用super(BaseClass, self).__init__()
但是抽象類沒有start
屬性。 嘗試訪問它時出現錯誤。
我如何將initialize
參數的值傳遞給AbstractClass
並使用BaseClass
的__init__
方法設置AbstractClass
的start
屬性。
我使用的代碼
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.