Отражение Python - Могу ли я использовать это, чтобы получить исходный код определения метода - PullRequest
10 голосов
/ 22 апреля 2009

Дубликат ..


У меня есть определение метода, которое успешно выполняется, но я хотел бы изменить его во время выполнения.

например: Если у меня есть метод

def sayHello():
    print "Hello"

type (sayHello) дает мне ответ «type function». Смогу ли я получить строку исходного кода этого объекта функции. Считается ли это проблемой безопасности?

Ответы [ 4 ]

18 голосов
/ 22 апреля 2009

Используйте модуль проверки:

import inspect
import mymodule
print inspect.getsource(mymodule.sayHello)

Функция должна быть определена в импортируемом модуле.

2 голосов
/ 15 апреля 2014

Чтобы получить источник метода для экземпляра класса, выполните:

import inspect
myobj = MyModel()
print inspect.getsource(myobj.my_method)

Подробнее: https://docs.python.org/2/library/inspect.html#inspect.getsource

2 голосов
/ 22 апреля 2009

sayHello.func_code.co_code возвращает строку, которая, я думаю, содержит скомпилированный код метода. Поскольку Python внутренне компилирует код в байт-код виртуальной машины, это может быть все, что осталось.

Вы можете разобрать его, хотя:

import dis

def sayHello():
  print "hello"

dis.dis(sayHello)

Это печатает:

   1           0 LOAD_CONST               1 ('hello')
               3 PRINT_ITEM
               4 PRINT_NEWLINE
               5 LOAD_CONST               0 (None)
               8 RETURN_VALUE

Посмотрите на Декомпиляция для декомпилятора.

0 голосов
/ 22 апреля 2009

Нет встроенной функции для получения исходного кода функции, однако вы можете создать свой собственный, если у вас есть доступ к исходному коду (он будет в вашем каталоге Python / lib).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...