@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 更灵活?