Как получить объект из строки?

Скажем, у меня есть следующий class

 class Test: def TestFunc(self): print 'this is Test::TestFunc method' 

Теперь я создаю экземпляр class Test

 >>> >>> t = Test() >>> >>> t <__main__.Test instance at 0xb771b28c> >>> 

Теперь t.TestFunc представлен следующим образом

 >>> >>> t.TestFunc <bound method Test.TestFunc of <__main__.Test instance at 0xb771b28c>> >>> 

Теперь я t.TestFunc представление Python t.TestFunc на строку string_func

 >>> >>> string_func = str(t.TestFunc) >>> string_func '<bound method Test.TestFunc of <__main__.Test instance at 0xb771b28c>>' >>> 

Теперь, есть ли способ, где я могу получить дескриптор функции из строкового <bound method Test.TestFunc of <__main__.Test instance at 0xb771b28c>> . Например,

 >>> >>> func = xxx(string_func) >>> func <bound method Test.TestFunc of <__main__.Test instance at 0xb771b28c>> >>> 

3 Solutions collect form web for “Как получить объект из строки?”

Вы не можете с одной строкой вернуться к одному и тому же объекту, потому что Python не дает вам метод поиска объектов по адресу памяти.

Вы можете вернуться к другому экземпляру __main__.Test , если он конструктор не принимает никаких аргументов и снова ищет метод, но у него не будет одинакового адреса памяти.

Вам придется разбирать строку для своих компонентов (модуль, имя класса и имя метода), а затем использовать getattr() для различных компонентов, getattr() экземпляр класса как часть процесса. Я сомневаюсь, что это то, чего вы хотели.

Есть несколько подводных камней, которые следует учитывать:

  • экземпляр Test может быть или не существовать больше
  • экземпляр, возможно, был собран мусором
  • экземпляр, возможно, имел функцию, Test.TestFunc обезьяной Test.TestFunc
  • может быть создан другой объект на 0xb771b28c

Вы можете использовать getattr .

  In [1]: class Test: def TestFunc(self): print 'this is Test::TestFunc method' In [2]: t = Test() In [3]: getattr(t, 'TestFunc') Out[3]: <bound method Test.TestFunc of <__main__.Test instance at 0xb624d68c>> In [4]: getattr(t, 'TestFunc')() this is Test::TestFunc method 
  • Как управлять длиной результата string.format (bool_value) в Python?
  • Объединение элемента в список строк
  • Быстрый поиск коротких строк в Python
  • Извлечение даты из строки в Python
  • Подсчет появления нескольких подстрок в панде
  • Извлечение части текста строки с совпадением начала и конца с использованием регулярных выражений в Python
  • Интерпретация строки Python
  • Python Socket Send Buffer Vs. улица
  • Python - лучший язык программирования в мире.