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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:25:15