Форум сайта python.su
inspect.getsource(type(name, bases, dict))
IOError: could not find class definition
по русски говоря как получить getsource для run-time созданного класса?
Офлайн
сгенерируй сам, у тебя же есть все для этого необходимое.
Зачем такое нужно?
Офлайн
наверно не 1 класс надо сгенерировать, вручную в jinja не писать ж сотню шаблонов и тд. нужно lkz автоматизации тестирования кое чего
Офлайн
я имел ввиду написать на питоне генератор исходника через тот же getsource для методов
Офлайн
там методов нет, параметры нужно прописывать, некоторые параметры = обьекты. генерация кода методов тут не поможет
Офлайн
ну так еще проще же. Почему так нельзя сделать:
import re def gensrc(cls): bases = ', '.join(base_cls.__name__ for base_cls in cls.__bases__) src = 'class {}({}):'.format(cls.__name__,bases) for slot, value in [(key,value) for key,value in cls.__dict__.items() if not re.match('__.+__',key)]: src += '\n {} = {}'.format(slot, value) return src print(gensrc(type('Class',(object,),{'a':1}))) class Class(object): a = 1
Офлайн
не для всех случаев подойдет
class datatype(object): name = None schema = None def __init__(self,name,schema=None): self.name = name self.schema = schema
print (gensrc(type('Class',(object,),{'type':datatype("name",schema="schema")}))) class Class(object): type = <__main__.datatype object at 0x110319f10>
Офлайн
тогда еще можно распарсить __init__ у атрибутов-объектов, там возни побольше будет…
Офлайн