簡體   English   中英

在Python中從超類繼承到子類

[英]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.

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