
跟着鱼佬教程到27min时,用作家继承人类之后报错,怎么解决🥺
上午好☀️☀️☀️️
本答案参考通义千问
你好!关于你在使用 ROS 2.5.1(可能是你误写,实际应为 ROS 2 的某个版本,比如 foxy、humble 或 jammy 等)时,按照“鱼佬”教程进行类继承时出现的报错问题,我们来一步一步分析并解决。
在ROS 2中进行类继承时,最常见的错误包括:
super() 初始化父类根据你的描述,“作家继承人类”可能是类似以下代码:
class Writer(Human):
def __init__(self):
super().__init__()
如果这个代码在ROS 2中运行时报错,可能是以下原因:
Human 类已经在同一个文件或其它模块中正确定义。Human 是一个自定义类,确保它在同一个目录下,或者通过 sys.path 正确引入。重点: 在ROS 2中,如果你是通过
setup.py构建的包,要确保所有依赖和模块路径都正确。
Writer 和 Human 是否有大小写不一致的问题。Humen 而不是 Human。super() 初始化父类__init__ 方法中,必须调用 super().__init__() 来初始化父类。super(),可能会导致属性未被正确初始化。✅ 示例代码如下:
class Human:
def __init__(self):
self.name = "Unknown"
class Writer(Human):
def __init__(self, name):
super().__init__() # 必须调用
self.name = name
.py 文件在正确的 src/your_package_name/ 目录下。setup.py 中包含了该模块的引用,例如:entry_points={
'console_scripts': [
'your_node = your_package.your_module:main',
],
},
NameError: name 'Human' is not definedTypeError: super() argument 1 must be type, not str假设你原本的代码如下:
class Writer(Human):
def __init__(self):
# 错误:没有调用 super()
pass
修改后:
class Human:
def __init__(self):
self.name = "Unknown"
class Writer(Human):
def __init__(self, name):
super().__init__() # 正确调用父类构造函数
self.name = name
为了避免依赖冲突,请确保:
colcon build 构建你的工作空间。.py 而非 .pyc 或 .pyo。| 问题 | 解决方案 |
|------|----------|
| 基类未定义 | 确认 Human 类是否存在并正确导入 |
| 拼写错误 | 检查类名大小写和拼写 |
| 未调用 super() | 在 __init__ 中添加 super().__init__() |
| 包结构错误 | 检查 setup.py 和文件路径 |
| 报错信息不明确 | 查看具体错误提示并定位 |
如果你能提供具体的错误信息(比如控制台输出),我可以更精准地帮你定位问题。希望这能帮到你!😊
如有需要,我也可以提供一份标准的 ROS 2 类继承模板。