Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 27, 2013 18:14:05

cancerhermit
Зарегистрирован: 2013-05-19
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

inspect.getsource(type(name, bases, dict)) IOError: could not find class definition

inspect.getsource(type(name, bases, dict))

IOError: could not find class definition

по русски говоря как получить getsource для run-time созданного класса?

Офлайн

#2 Июнь 27, 2013 18:29:48

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

inspect.getsource(type(name, bases, dict)) IOError: could not find class definition

сгенерируй сам, у тебя же есть все для этого необходимое.
Зачем такое нужно?

Офлайн

#3 Июнь 27, 2013 18:32:05

cancerhermit
Зарегистрирован: 2013-05-19
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

inspect.getsource(type(name, bases, dict)) IOError: could not find class definition

наверно не 1 класс надо сгенерировать, вручную в jinja не писать ж сотню шаблонов и тд. нужно lkz автоматизации тестирования кое чего

Офлайн

#4 Июнь 27, 2013 18:38:42

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

inspect.getsource(type(name, bases, dict)) IOError: could not find class definition

я имел ввиду написать на питоне генератор исходника через тот же getsource для методов

Офлайн

#5 Июнь 27, 2013 18:45:20

cancerhermit
Зарегистрирован: 2013-05-19
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

inspect.getsource(type(name, bases, dict)) IOError: could not find class definition

там методов нет, параметры нужно прописывать, некоторые параметры = обьекты. генерация кода методов тут не поможет

Офлайн

#6 Июнь 27, 2013 19:16:39

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

inspect.getsource(type(name, bases, dict)) IOError: could not find class definition

ну так еще проще же. Почему так нельзя сделать:

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

или тебе что-то другое нужно?

Офлайн

#7 Июнь 27, 2013 19:22:27

cancerhermit
Зарегистрирован: 2013-05-19
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

inspect.getsource(type(name, bases, dict)) IOError: could not find class definition

не для всех случаев подойдет

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>

Офлайн

#8 Июнь 27, 2013 19:36:38

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

inspect.getsource(type(name, bases, dict)) IOError: could not find class definition

тогда еще можно распарсить __init__ у атрибутов-объектов, там возни побольше будет…

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version