Форум сайта python.su
Хочется чуть чуть уменьшить писанину в следующем процессе:
из БД читается список полей класса и спецификатов типа (для ctypes)
далее полученный список передается для создания класса
def a(cls):
cls.__bases__=(ctypes.Structure,)
cls.a=5
cls._fields_=[("aaa",c_int)]
return cls
def f(lst):
@a(lst)
class Tm(ctypes.Structure):
pass
return Tm
type("Ta",(Structure,),{"_fields_":[("aaa",c_int)]})]
Отредактировано (Июнь 30, 2011 21:11:07)
Офлайн
Structure — недокласс. У него нет __base__, __bases__, __mro__ — т.е. он не унаследован от type.
Можете смело писать баг, как мне кажется. Это недоработка в С коде.
__bases__ менять можно. Насколько смело — вам решать. Кажется, в cpython проблем нет. В остальных реализациях, уверен, будут — не любят они этого.
Можно похачить Structure, унаследовавшись и добавив необходимые поля, засунув его обратно манки-патчингом. В результате не уверен.
Офлайн
Если, конечно, я нигде не ошибаюсь.
Офлайн