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

标签 python python-3.x type-hinting

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

相关文章:

python - Bybit API Python API key 无效

python-3.x - 使用 pyspark 跟踪具有附加条件的前一行值

python - 为什么我的直方图条都显示频率为 1

python - Mypy子类中更具体的参数

抽象方法的 PHP 类型提示实现 - 存储库模式

python - .pyc 文件是否包含类型提示信息?

python - 从 python 中的 sys.stderr 读取

python - 属性错误: 'function' object has no attribute 'bar' in pandas

python - pandas 系列中的矢量化索引 numpy 数组与 pandas 系列中的 bool numpy 数组

python - 承包 networkx 中的节点列表