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。