【发布时间】:2023-04-06 20:04:02
【问题描述】:
在 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 静态类型检查系统一起使用。
【问题讨论】:
-
这能回答你的问题吗? Type hints with user defined classes
-
@Georgy 不直接。那就是询问如何使用自定义类,以注释该函数采用该类的实例。我希望它自己上课。它可以是任何类,只要它是类定义,而不是对象。但这个答案给了我使用
Type[Any]的想法。这可能行得通。 -
哦,好的。我并不清楚您正在寻找 any 类的类型提示。链接相关问题(但不确定它们是否是适当的重复目标):Python type hint for (any) class、What type in the typing module describes a class? What type describes a function?。
标签: python python-3.x mypy python-typing ros2