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

Python类中无法访问回调函数定义的self.data属性该如何解决?

问题原因

  • 你注释了__init__方法中self.data = None的初始化语句,类实例创建时没有预先定义data属性,只要imu_callback还没被触发过,访问self.data就会直接抛出属性不存在的错误。
  • 回调函数是异步执行的,你在get_observation里刚完成订阅器注册就立刻读取self.data,此时还没有IMU消息进来触发回调,self.data自然还没被赋值。

解决方法

首先恢复__init__中的self.data初始化,保证实例创建后就存在该属性:

def __init__(self):
    self.data = None

如果需要在get_observation中获取到有效的IMU数据,需要增加等待逻辑,等self.data被回调赋值后再读取,修改后的完整代码如下:

import rospy
from sensor_msgs.msg import Imu

class ImuData:
    def __init__(self):
        self.data = None

    def get_observation(self):
        rospy.Subscriber('/imu', Imu, self.imu_callback)
        # 等待回调完成首次赋值
        while self.data is None and not rospy.is_shutdown():
            rospy.sleep(0.01)
        imuData = self.data
        print(imuData)

    def imu_callback(self, msg):
        self.data = msg.orientation
        print(self.data)


if __name__ == '__main__':
    rospy.init_node('gett_imu', anonymous= True)
    idd = ImuData()
    idd.get_observation()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:36:02