ell*_*493 11 python type-hinting python-3.x
我想获取对象属性的类型提示。我只能获得该类的提示,而不能获得该类的实例。
我尝试foo_instance.__class__
从这里使用,但只显示类变量。
那么在示例中如何获得 的类型提示bar
?
class foo:
var: int = 42
def __init__(self):
self.bar: int = 2
print(get_type_hints(foo)) # returns {'var': <class 'int'>}
Run Code Online (Sandbox Code Playgroud)
小智 6
我刚刚遇到了同样的问题。python 文档不太清楚,因为该示例是用现在正式称为数据类的内容制作的。
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']
}
Run Code Online (Sandbox Code Playgroud)
它给人的印象是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__))
Run Code Online (Sandbox Code Playgroud)
最后,对于您的确切示例,我相信您有两种选择。如果您的逻辑允许,您可以实例化一个临时对象并del
在之后立即清理它。或者将您的变量声明为带有或不带有默认值的类变量,以便您可以在实例化中获取它们get_type_hints()
并在稍后分配它们。