如何在 dis.dis 之后获得 LOAD_CLASSDEREF 指令?

How do I get LOAD_CLASSDEREF instruction after dis.dis?

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

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

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

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

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

您还可以在 foo 的字节码中看到一个 LOAD_CLOSURE