python - 覆盖需要在 __init__() 中计算的子类中的变量的正确方法是什么?

标签 python oop inheritance

我正在学习 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/

相关文章:

python - 如何在 Python 中将没有空格的字符串拆分为整数列表?

c# - 可以在 Dictionary 继承的类中重新定义索引器吗?

Javascript - 从原型(prototype)方法内部调用子方法

Javascript - 覆盖克隆库中继承的方法

c# - 方法签名中具有基类型的派生类型集合的扩展方法

c++ - '{' token c++ 继承问题之前的另一个预期类名

python - 从 .ply 转换为 .pcd 格式

python - 如何使用python通过循环设置多个变量

Python 字符串拆分为多个字符

java - 我的java接口(interface)队列的thread.main问题,如何解决?