使用with open语法时,read()函数的实现定义来源何处?
寻找read()函数return语句的调用位置
你找到的这两个都是抽象/占位实现,本身没有实际的return逻辑:
- 第一个是类型标注占位的空实现(常见于
.pyi这类存根文件),只定义了参数和返回类型,没有实际执行代码 - 第二个是被
@abstractmethod装饰的抽象方法,仅声明方法结构,具体逻辑需要由子类来实现
要找到真正带有return语句的read()实现,你可以按以下步骤来:
- 定位该类的具体子类:比如如果是文件对象的read(),实际实现存在于
_io.TextIOWrapper或_io.BufferedReader这类具体IO类中 - 梳理继承链:用
inspect.getmro(目标类)查看类的继承层次,找到最底层的非抽象子类 - 查看对应类的源码:可以在Python解释器中用
print(实例对象.__class__.read.__code__)查看方法字节码,若是内置IO类,也可以去CPython源码仓库查找对应的C语言实现
举个简单例子,如果你在处理普通文件对象:
f = open("test.txt", "r") print(f.__class__) # 输出具体类,比如<_io.TextIOWrapper object at 0x...> # 接着查看这个类的read方法实现即可
内容的提问来源于stack exchange,提问作者GnomGnomych
相关产品推荐
相关产品推荐

