Python Point类属性操作报错:AttributeError问题及坐标反射实现
Python Point类链式调用报错:AttributeError: 'NoneType' object has no attribute 'print'
问题出在你的reflect_x方法上——这个方法只修改了实例的y坐标,但没有返回任何值,Python中没有return语句的函数默认返回None。当你执行p3.reflect_x().print()时,实际上是在None对象上调用print方法,这就触发了AttributeError。
要解决这个问题,有两种常用方式:
方式一:让reflect_x返回实例自身,支持链式调用
修改reflect_x方法,在最后添加return self,这样调用完reflect_x后会返回当前Point实例,就能接着调用print()方法。同时调整主代码中的调用逻辑,让p1、p2也执行反射操作以得到你期望的输出:
class Point: def __init__(self, x, y): self.x = x self.y = y def print(self): print((self.x, self.y)) # 简化代码,直接打印坐标元组 def reflect_x(self): self.y *= -1 return self # 返回实例自身,支持链式调用 p1 = Point(1,4) p1.reflect_x().print() p2 = Point(-3,5) p2.reflect_x().print() p3 = Point(-3,-5) p3.reflect_x().print()
运行这段代码会输出你期望的结果:
(1, -4) (-3, -5) (-3, 5)
方式二:分开执行方法调用,不使用链式操作
如果你不需要链式调用的写法,也可以分步执行反射和打印操作:
p3 = Point(-3,-5) p3.reflect_x() # 先修改坐标 p3.print() # 再打印结果
这种写法更直观,同样能避免None对象调用方法的错误。
内容的提问来源于stack exchange,提问作者SiBMs
相关产品推荐
相关产品推荐

