gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:26:38 25 4
gpt4 key购买 nike

我想获取对象属性的类型提示。我只能得到类的提示,而不是它的实例。
我试过使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com