[英]Inheriting from super class to subclasses in Python
我有一個超類,它具有一些類屬性,例如:
class Config(object):
LENGTH = 1
BREADTH = 3
現在,我創建了一個子類,它將覆蓋父類的屬性。
class Sub1(Config):
def __init__():
self.LENGTH = 200
self.BREADTH = 100
self.AREA = self.LENGTH * self.BREADTH
現在,我需要編寫另一個子類,它將覆蓋第一個子類的值。 在這里,我應該從父類Config繼承,還是可以覆蓋子類本身中的值並進行更改。
class Sub2(Sub1):
self.AREA_UPDATED = self.AREA + 20
這是行不通的。
class Sub2(Config):
self.LENGTH = "efg"
self.BREADTH = 100
self.AREA = self.LENGTH * self.BREADTH
self.AREA_UPDATED = self.AREA + 20
這可行。 我在概念上做錯了,父類只能被繼承嗎? 好心的建議。
謝謝
您不能在class
范圍內使用self
。 您應該只使用變量名稱,就像這樣:
class Sub2(Config):
LENGTH = "efg"
BREADTH = 100
AREA = LENGTH * BREADTH
AREA_UPDATED = AREA + 20
因為這樣,您將像在__init__
一樣覆蓋類屬性,而不僅是實例屬性。
從Sub1
繼承,您可以執行以下操作:
class Sub1(Config):
LENGTH = 200
BREADTH = 100
AREA = LENGTH * BREADTH
class Sub2(Sub1):
AREA_UPDATED = Sub1.AREA + 20
更改
class Sub2(Sub1):
self.AREA_UPDATED = self.AREA + 20
至
class Sub2(Sub1):
def __init__(self):
self.AREA_UPDATED = self.AREA + 20
如果我錯了,請糾正我,但是您是否不使用init的寬度和寬度正確地實例化對象? 我的意思是這樣的:
class Config(object):
def __init__(self, width, breadth):
self.width = width
self.breadth = breadth
self.area = width*breadth
將配置作為超類(您也可以將其用作抽象基類,在這種情況下,我的解決方案將是錯誤的)。
然后適當地讓Sub1像這樣從Config繼承:
class Sub1(Config):
def __init__(self,width,breadth):
Config.__init__(self,width,breadth)
self.area = width * breadth
對於sub2,您顯然可以執行相同的操作。 如果您想知道更新的區域,可以只使用setter作為該類具有的屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.