cancerhermit
Июнь 27, 2013 18:14:05
inspect.getsource(type(name, bases, dict))
IOError: could not find class definition
по русски говоря как получить getsource для run-time созданного класса?
sergeek
Июнь 27, 2013 18:29:48
сгенерируй сам, у тебя же есть все для этого необходимое.
Зачем такое нужно?
cancerhermit
Июнь 27, 2013 18:32:05
наверно не 1 класс надо сгенерировать, вручную в jinja не писать ж сотню шаблонов и тд. нужно lkz автоматизации тестирования кое чего
sergeek
Июнь 27, 2013 18:38:42
я имел ввиду написать на питоне генератор исходника через тот же getsource для методов
cancerhermit
Июнь 27, 2013 18:45:20
там методов нет, параметры нужно прописывать, некоторые параметры = обьекты. генерация кода методов тут не поможет
sergeek
Июнь 27, 2013 19:16:39
ну так еще проще же. Почему так нельзя сделать:
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
или тебе что-то другое нужно?
cancerhermit
Июнь 27, 2013 19:22:27
не для всех случаев подойдет
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>
sergeek
Июнь 27, 2013 19:36:38
тогда еще можно распарсить __init__ у атрибутов-объектов, там возни побольше будет…