如何获取对象属性的类型提示?

2023-11-22

我想获取对象属性的类型提示。我只能获得该类的提示,而不能获得该类的实例。

我尝试过使用foo_instance.__class__ from here但这只显示了类变量。

那么在示例中我如何获得类型提示bar?

class foo:
    var: int = 42
    def __init__(self):
        self.bar: int = 2

print(get_type_hints(foo)) # returns {'var': <class 'int'>}

我刚刚遇到了同样的问题。这蟒蛇文档不是很清楚,因为该示例是用现在正式称为数据类的内容制作的。

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()返回基于函数的提示,而不是基于类。这样就可以同时使用if我们知道。一个普通的类显然没有在它的声明中被实例化,它没有在类中设置任何变量__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()并稍后在实例化中分配它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取对象属性的类型提示? 的相关文章

随机推荐