如何在 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
。
我应该写什么函数/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
。