Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中超类到子类的继承_Python_Oop - Fatal编程技术网

Python中超类到子类的继承

Python中超类到子类的继承,python,oop,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 现在我需要编写

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

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 Sub2(Sub1):
   self.AREA_UPDATED = self.AREA + 20

不能在类范围内使用self。您应该像下面这样简单地使用变量名:

class Sub2(Config):
    LENGTH = "efg"
    BREADTH = 100
    AREA = LENGTH * BREADTH
    AREA_UPDATED = AREA + 20
class Config(object):
   def __init__(self, width, breadth):
       self.width = width
       self.breadth = breadth
       self.area = width*breadth
class Sub1(Config):
  def __init__(self,width,breadth):
      Config.__init__(self,width,breadth)
      self.area = width * breadth
因为这样,您将覆盖类属性,而不仅仅是实例属性,就像您在_init__中所做的那样

从Sub1继承可以执行相同的操作:

class Sub1(Config):
    LENGTH = 200
    BREADTH = 100
    AREA = LENGTH * BREADTH 

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

如果我错了,请纠正我,但是您是否会使用init中的宽度和宽度来正确实例化对象? 我的意思是,就像这样:

class Sub2(Config):
    LENGTH = "efg"
    BREADTH = 100
    AREA = LENGTH * BREADTH
    AREA_UPDATED = AREA + 20
class Config(object):
   def __init__(self, width, breadth):
       self.width = width
       self.breadth = breadth
       self.area = width*breadth
class Sub1(Config):
  def __init__(self,width,breadth):
      Config.__init__(self,width,breadth)
      self.area = width * breadth
将配置作为超类,您也可以将其用作抽象基类,在这种情况下,我的解决方案是错误的

然后让Sub1从配置中继承如下内容:

class Sub2(Config):
    LENGTH = "efg"
    BREADTH = 100
    AREA = LENGTH * BREADTH
    AREA_UPDATED = AREA + 20
class Config(object):
   def __init__(self, width, breadth):
       self.width = width
       self.breadth = breadth
       self.area = width*breadth
class Sub1(Config):
  def __init__(self,width,breadth):
      Config.__init__(self,width,breadth)
      self.area = width * breadth
对于sub2,您显然也可以这样做。如果您想知道更新的区域,您可以对类的属性使用setter。

您应该像这样修复uuu init_uu:def uu init_uself:。在课堂上,你不能使用self。