You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.pyc文件是否包含类型提示信息?能否通过typing.get_type_hints()读取?

类型提示在.pyc文件中的留存与访问问题

你问到的这个问题很有意思——之前以为类型提示全靠读取明文源码,但其实Python确实会把类型提示信息存储在对象本身,那编译成.pyc后还能拿到这些信息吗?答案是肯定的,类型信息会被保留,拿到.pyc文件的人完全可以用typing.get_type_hints()来访问。

为什么类型提示能在.pyc中留存?

Python在编译.py文件到.pyc时,会把函数的类型注解(也就是你写的a: int、-> str这类内容)作为函数对象的__annotations__属性保存下来。这个属性是一个字典,会被序列化到.pyc文件里,和函数的其他元数据(比如名称、参数信息)一起存储。

实际验证一下

我们可以用你给出的代码来测试:

  1. 先写一个test.py文件:
def myfunc(a: int, b:int) -> str:
    return "{a} + {b} = {a+b}"
  1. 编译成.pyc(可以直接运行一次,Python会自动生成__pycache__目录下的.pyc文件)。
  2. 删除原.py文件,只保留.pyc文件,然后在同一个目录下运行Python交互环境:
from test import myfunc
import typing

print(myfunc.__annotations__)
# 输出: {'a': <class 'int'>, 'b': <class 'int'>, 'return': <class 'str'>}

print(typing.get_type_hints(myfunc))
# 输出同样是上面的字典内容

从结果就能看到,即使没有原.py文件,仅通过.pyc也能完整获取到类型提示信息。

补充说明

  • 这里的前提是编译.pyc时的Python版本和读取时的版本兼容(比如都是3.10+,不同小版本一般没问题,但跨大版本可能存在兼容性问题)。
  • 如果你担心类型提示被获取,目前Python本身没有默认机制在编译时移除这些注解,除非你手动在代码里删除__annotations__属性,或者使用第三方工具来剥离这类元数据。

内容的提问来源于stack exchange,提问作者Schilcote

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:52:24