2014-06-07 2 views
1

Скажем, у меня есть класс «NumberStore»Как вернуть определение класса в python?

class NumberStore(object): 
    def __init__(self, num): 
     self.num = num 

    def get(self): 
     return self.num 

И в дальнейшем, с целью сериализации, я хочу, чтобы напечатать определение класса, либо в точности, как указано, или что то же самое сказал. Есть ли способ в python получить доступ к определению класса, как в идеализированном примере ниже?

>>> NumberStore.print_class_definition() 
"class NumberStore(object):\n def __init__(self, num):\n  self.num = num\n \n def get(self):\n  return self.num" 
+0

Обратите внимание, что все вдоль этих линий не получится для классов, определенных с помощью свободных переменных. Самый простой пример - это параметр по умолчанию, например def def (x = CONSTANT): ... ', но он также включает в себя декораторы (хотя многие общие декораторы встроены и, следовательно, почти универсально доступны). – delnan

ответ

2

Да, с inspect.getsource:

from inspect import getsource 

class NumberStore(object): 
    def __init__(self, num): 
     self.num = num 

    def get(self): 
     return self.num 

    @classmethod 
    def print_class_definition(cls): 
     return getsource(cls) 
+1

Отличный ответ. Спасибо за информацию. Как примечание для тех, кто этого не использовал; он не работает в интерактивном интерпретаторе, для его использования должен быть написан скрипт или модуль python. – user1276560

Смежные вопросы