Найти - Пользователи
Полная версия: inspect.getsource(type(name, bases, dict)) IOError: could not find class definition
Начало » Python для экспертов » inspect.getsource(type(name, bases, dict)) IOError: could not find class definition
1
cancerhermit
inspect.getsource(type(name, bases, dict))

IOError: could not find class definition

по русски говоря как получить getsource для run-time созданного класса?
sergeek
сгенерируй сам, у тебя же есть все для этого необходимое.
Зачем такое нужно?
cancerhermit
наверно не 1 класс надо сгенерировать, вручную в jinja не писать ж сотню шаблонов и тд. нужно lkz автоматизации тестирования кое чего
sergeek
я имел ввиду написать на питоне генератор исходника через тот же getsource для методов
cancerhermit
там методов нет, параметры нужно прописывать, некоторые параметры = обьекты. генерация кода методов тут не поможет
sergeek
ну так еще проще же. Почему так нельзя сделать:
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
не для всех случаев подойдет
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
тогда еще можно распарсить __init__ у атрибутов-объектов, там возни побольше будет…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB