0

在 ros2 的 python 客户端库中,有一个函数接受类类型作为参数(不是该类的实例,而是定义)。

例如

from std_msgs.msg import String
#String is python class i.e,
#class String:
#    ...

class MyNode(Node)
    def __init__(self):
        super().__init__('my_node')
        self.add_subscription(String, 'chatter', lambda msg : print(msg))
        #Note that we pass in the type String, not an object, i.e String()

如何使用 python 类型注释来注释这样的事情?

一种方法是使用Executable类型提示,因为可以调用类类型()来构造对象。但这并不能很好地传达它的真正含义。

def foo(class_type: Executable):
   obj: Any = class_type()

如果有类似的东西会更好:

def foo(class_type: Class):
   object: Any = class_type()

有这样的吗?执行此操作的标准方法是什么?

理想情况下,我希望它与 MyPy 静态类型检查系统一起使用。

4

1 回答 1

0

实际上有一个你想要的类型提示,它只是被称为Type而不是Class,这里是它的文档:https ://docs.python.org/3/library/typing.html#typing.Type

如您所见,您可以告诉它它应该是什么类,因此在您给出的示例中,它将是:

Type[String]
于 2020-08-30T16:44:31.257 回答