我正在学习 Python 中的继承机制,我想制作一些在子 __init_() 函数内自动计算的变量,但问题是我想制作另一个类,其中的变量将被覆盖。而且我不希望这些变量被计算两次,一次在父级中,然后在子级中。那么,下面的示例是否正确?
class Shape(object):
def __init__(self, x, y):
self.x = x
self.y = y
def getcenter(self):
return self.x, self.y
class Square(Shape):
def __init__(self, x, y, a):
super().__init__(x,y)
self.a = a
self.perimeter = 4*a
self.field = a*a
class Rectangle(Square):
def __init__(self, x, y, a, b):
super().__init__(x, y, a)
self.perimeter = (2*a) + (2*b)
self.field = a*b
最佳答案
好吧,忽略你的上面实际上有 Square 子类 Rectangle 会更好,通常这种类型的逻辑会被移动到一个被子类覆盖的新函数中。
class Square:
def __init__(self, a):
self.a = a
self.calculate_perimeter()
def calculate_perimeter(self):
self.perimeter = self.a * 4
class Rectangle(Square):
def __init__(self, a, b):
self.b = b
super().__init__(a)
# automatically called by the parent class
def calculate_perimeter(self):
self.perimeter = self.a * 2 + self.b * 2
关于python - 覆盖需要在 __init__() 中计算的子类中的变量的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40244192/