首页 > 解决方案 > 如何在 dis.dis 之后获得 LOAD_CLASSDEREF 指令?

问题描述

我应该编写什么函数/类来获取 LOAD_CLASSDEREF 作为字节码指令?

我已经能够找到导致 LOAD_BUILD_CLASS、LOAD_CONST、LOAD_GLOBAL、LOAD_FAST、LOAD_ATTR、LOAD_DEREF、LOAD_NAME、字节码的函数/类,但是什么函数/类会给出 LOAD_CLOSURE 和 LOAD_CLASSDEREF?

标签: pythondisassembly

解决方案


LOAD_CLASSDEREF用于当类主体访问闭包变量时,因此让类主体访问闭包变量:

def foo():
    x = 3
    class Bar:
        print(x)

然后,代码对象Bar将使用LOAD_CLASSDEREF. 根据您的 Python 版本,您可能必须从中挖掘代码对象foo.__code__.co_consts并直接调用dis.dis该代码对象以查看dis.dis输出中的操作码。

您还可以LOAD_CLOSUREfoo.


推荐阅读