我想获取对象属性的类型提示。我只能得到类的提示,而不是它的实例。
我试过使用 foo_instance.__class__
来自 here但这仅显示类变量。
所以在示例中我如何获得 bar
的类型提示?
class foo:
var: int = 42
def __init__(self):
self.bar: int = 2
print(get_type_hints(foo)) # returns {'var': <class 'int'>}
最佳答案
我只是遇到了同样的问题。 python doc不是很清楚,因为这个例子是用现在正式称为数据类的东西制作的。
Student(NamedTuple):
name: Annotated[str, 'some marker']
get_type_hints(Student) == {'name': str}
get_type_hints(Student, include_extras=False) == {'name': str}
get_type_hints(Student, include_extras=True) == {
'name': Annotated[str, 'some marker']
}
它给人的印象是get_type_hints()
直接在类里面工作。原来get_type_hints()
返回基于函数的提示,而不是基于类。这样它就可以与 一起使用如果 我们知道。一个普通的类显然没有在它的声明中被实例化,它没有在 __init__()
中设置任何变量。尚未被调用的方法。如果我们希望有可能从类范围的变量中获取类型提示,那也不是这样。所以你可以在
__init__()
上调用它,也就是说,如果变量在参数中传递(是的,我看到它不在您的示例中,但可能会帮助其他人,因为我在数小时的搜索中没有在任何地方看到过);class foo:
var: int = 42
def __init__(self, bar: int = 2):
self.bar = int
print(get_type_hints(foo.__init__))
最后,对于您的确切示例,我相信您有两种选择。您可以实例化一个临时对象并使用 del
如果您的逻辑允许,请立即清理它。或者将您的变量声明为带或不带默认值的类变量,以便您可以使用 get_type_hints()
获取它们并稍后在实例化中分配它们。
关于python - 如何获取对象属性的类型提示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62723766/