Ну, вот и начало.Вы будете использовать несколько стандартных библиотек:
import dis
import inspect
Предположим, вы заинтересованы в следующем исходном коде: myfolder/myfile.py
Затем сделайте следующее:
import myfolder.myfile
def some_func():
''
loads = {'LOAD_GLOBAL', 'LOAD_ATTR'}
name_to_member = dict(inspect.getmembers(myfolder.myfile))
for name, member in name_to_member.items():
if type(member) == type(some_func):
print(name)
for ins in dis.get_instructions(member):
if ins.opname in loads:
print(name, ins.opname, ins.argval)
Другие интересные вещи:запустите dis.dis(member)
или распечатайте dis.code_info(member)
.
Это позволит вам посетить каждую функцию, определенную в файле, и посетить каждый исполняемый оператор, чтобы узнать, не является ли это вызовом метода, который вас интересует.Тогда вам решать, как поступить правильно с потенциальными методами испытаний.