@1635731080 你这个错误的本质是:

TypeError: PersonNode.__init__() missing 1 required positional argument: 'age'

虽然你明明传了 age,但出错行在 WriterNode.__init__() 的 super().__init__(name, age),这说明它找的 super() 不是你想的 PersonNode(node_name, name, age),而是找错了继承链!

🔍 核心问题分析:

你定义的 PersonNode 是:

class PersonNode(Node): def __init__(self, node_name: str, name: str, age: int) -> None: super().__init__(node_name) self.age = age self.name = name

然后 WriterNode 是:

class WriterNode(PersonNode): def __init__(self, name: str, age: int, book: str) -> None: super().__init__(name, age) # ❌ 你以为你传给 PersonNode(name, age) self.book = book

但是你忘了:PersonNode 的构造函数需要 三个参数:node_name, name, age,你只传了两个。

✅ 正确写法:

你应该这样调用 PersonNode.__init__:

class WriterNode(PersonNode): def __init__(self, name: str, age: int, book: str) -> None: super().__init__('writer_node', name, age) # ✅ 补上 node_name self.book = book print('WriterNode 的 __init__ 函数被调用了')

这里 'writer_node' 就是 ROS 节点名,随便你取,例如可以换成 'author_node'、'zhangsan_writer' 也行。

总结一句话:

你的 PersonNode.__init__() 要求是:

def __init__(node_name, name, age)

但是你只传了两个参数:

super().__init__(name, age) # ❌ 缺了 node_name

因此报错。

✔ 修改后完整 WriterNode: from demo_python_pkg.person_node import PersonNode class WriterNode(PersonNode): def __init__(self, name: str, age: int, book: str) -> None: super().__init__('writer_node', name, age) # ✅ 正确传入三个参数 print('WriterNode 的 __init__ 函数被调用了') self.book = book def main(): import rclpy rclpy.init() node = WriterNode('法外狂徒张三', 18, '论快速入狱') node.eat('鱼香肉丝') rclpy.spin(node) rclpy.shutdown()

如果你还有其他 Node 的继承设计问题,或者希望 WriterNode 中动态传入 node_name,也可以优化,我们可以继续改。是否需要我帮你重构让 node_name 更灵活?