Code_Everything 2024-04-19 16:55 采纳率: 0%
浏览 1

python多继承中的构造方法报错,有没有人看看是啥原因

今天在学习python多继承这一部分时,跟着齐伟的python自学教程敲了如下代码,但是一直报错


class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height

    def perimeter(self):
        return 2 * self.width + 2 * self.height


class Square(Rectangle):
    def __init__(self, side):
        super().__init__(side, side)


class Cube(Square):
    def surface_area(self):
        return self.area() * 6

    def vilume(self):
        return self.area() * self.width


class Triangle:
    def __int__(self, base, height):
        self.base = base
        self.height = height

    def area(self):
        return self.base * self.height * 0.5


class RightPyramid(Square, Triangle):
    def __int__(self, low_base, slant_height):
        self.low_base = low_base
        self.slant_height = slant_height
        super().__int__(self.low_base)

    def surface_area(self):
        s = super().area()
        p = super().perimeter()
        return s + p * self.slant_height * 0.5


if __name__ == '__main__':
    d = RightPyramid(2, 4)
    print(d.surface_area())

报错截图如下:

img

文字描述为:TypeError: Square.init() takes 2 positional arguments but 3 were given

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-19 16:55
    关注

    引自免费微信小程序:皆我百晓生

    看起来你在尝试创建一个名为RightPyramid的类,它继承自SquareTriangle两个类。然而,在RightPyramid的构造函数中,你错误地调用了父类Square的构造函数,传递了一个额外的参数self.low_base

    解决这个问题的方法是在调用super().__init__()时只传入side参数,因为Square类的构造函数只需要这个参数。同时,由于你的代码中有一个拼写错误,将__init__写成了__int__,你需要修复这个错误。以下是修正后的代码:

    class Rectangle:
        def __init__(self, width, height):
            self.width = width
            self.height = height
    
        def area(self):
            return self.width * self.height
    
        def perimeter(self):
            return 2 * self.width + 2 * self.height
    
    
    class Square(Rectangle):
        def __init__(self, side):
            super().__init__(side, side)
    
    
    class Cube(Square):
        def surface_area(self):
            return self.area() * 6
    
        def volume(self):
            return self.area() * self.width
    
    
    class Triangle:
        def __init__(self, base, height):
            self.base = base
            self.height = height
    
        def area(self):
            return self.base * self.height * 0.5
    
    
    class RightPyramid(Square, Triangle):
        def __init__(self, low_base, slant_height):
            super().__init__(low_base)  # Fixed the call to super().__init__()
            self.low_base = low_base
            self.slant_height = slant_height
    
        def surface_area(self):
            s = super().area()
            p = super().perimeter()
            return s + p * self.slant_height * 0.5
    
    
    if __name__ == '__main__':
        d = RightPyramid(2, 4)
        print(d.surface_area())
    

    现在这段代码应该可以正常运行,并且不会抛出TypeError了。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月19日

悬赏问题

  • ¥20 ESP32使用MicroPyhon开发,怎么获取485温湿度的值,温湿度计使用的鞋子是Modbus RTU
  • ¥50 苹果MGIE项目部署缺少emb权重
  • ¥15 采用ansys进行机翼在特定路径下的打孔过程中的受力分析
  • ¥15 单片机adb主机连接手机,usb调试密钥无法保存
  • ¥15 已知X和Y有以下关系,求X和Y的关系式
  • ¥15 net core 同时编辑怎么防止数据多保存了
  • ¥15 matlab做ba模型让其在ba和er规则下生长
  • ¥15 请问Quartus的Verilog代码怎么写?
  • ¥100 Mac 版foxmail 收邮件问题
  • ¥15 QWebEngineView