我有一个超类,它具有一些类属性,例如:
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
这有效。我在概念上做错了,父类只能被继承吗?请指教。
谢谢
答案 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作为该类具有的属性。