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
相关产品推荐
相关产品推荐

