You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python编写矩形类程序报NameError: name 'self'未定义如何解决?

问题原因

  • self是Python类实例方法的专属第一个参数,仅在类内部的方法作用域中有效。你编写的main_1、main_2都是独立于类的普通全局函数,作用域内不存在self变量,是触发本次报错的直接原因。
  • 构造方法中你定义的形参是w、h,但给实例属性赋值时用了未定义的width、height变量,属性赋值逻辑错误。
  • 无需定义两个矩形类,同一个类可以实例化多个不同参数的对象,重复定义属于冗余逻辑。
  • 类的方法必须通过实例对象调用,不能直接写方法名,且你定义的方法名不符合题目要求的getArea()、getPerimeter()命名规则。
  • 题目要求构造方法默认宽为1、高为2,你设置的默认值不符合需求。

修正后完整代码

class Rectangle:
    # 构造方法,默认宽1、高2
    def __init__(self, width=1, height=2):
        self.width = width
        self.height = height
    
    # 计算并返回矩形面积
    def getArea(self):
        return self.width * self.height
    
    # 计算并返回矩形周长
    def getPerimeter(self):
        return 2 * (self.width + self.height)

if __name__ == "__main__":
    # 实例化第一个矩形:宽4、高40
    rect1 = Rectangle(4, 40)
    print("第一个矩形参数:")
    print(f"宽:{rect1.width}")
    print(f"高:{rect1.height}")
    print(f"面积:{rect1.getArea()}")
    print(f"周长:{rect1.getPerimeter()}\n")
    
    # 实例化第二个矩形:宽3.5、高35.7
    rect2 = Rectangle(3.5, 35.7)
    print("第二个矩形参数:")
    print(f"宽:{rect2.width}")
    print(f"高:{rect2.height}")
    print(f"面积:{rect2.getArea()}")
    print(f"周长:{rect2.getPerimeter()}")

运行上述代码即可按要求输出两个矩形的宽、高、面积、周长参数。

内容的提问来源于stack exchange,提问作者alabasta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:24:05