在Python中从超类继承到子类

时间:2018-12-18 06:47:24

标签: python oop

我有一个超类,它具有一些类属性,例如:

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

这有效。我在概念上做错了,父类只能被继承吗?请指教。

谢谢

3 个答案:

答案 0 :(得分:1)

您不能在self范围内使用class。您应该只使用变量名,就像这样:

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

答案 1 :(得分:0)

更改

class Sub2(Sub1):
   self.AREA_UPDATED = self.AREA + 20

class Sub2(Sub1):
  def __init__(self):
     self.AREA_UPDATED = self.AREA + 20

答案 2 :(得分:0)

如果我错了,请纠正我,但是您是否不使用 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作为该类具有的属性。