Найти - Пользователи
Полная версия: class Tx(ctypes.Structure): Structure - не базовый класс?
Начало » Python для новичков » class Tx(ctypes.Structure): Structure - не базовый класс?
1
doza_and
Хочется чуть чуть уменьшить писанину в следующем процессе:
из БД читается список полей класса и спецификатов типа (для 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
на что резонно получаю по мозгам:
Traceback (most recent call last):
File “C:\PROJECTS\ake\usersoft\db\a.py”, line 23, in <module>
class Ta(Tc):
File “C:\PROJECTS\ake\usersoft\db\a.py”, line 18, in a
cls.__bases__=(ctypes.Structure,)
TypeError: __bases__ items must be classes

аналогично не получаю по мозгам от:
type("Ta",(Structure,),{"_fields_":[("aaa",c_int)]})]
Немного интригует вопрос - Structure не базовый класс? А кто он тогда?
Довольно странная диагностика отсутствия необходимых параметров класса.
МОжноли в готовый класс безболезненно насовать базовых классов?
Андрей Светлов
Structure — недокласс. У него нет __base__, __bases__, __mro__ — т.е. он не унаследован от type.
Можете смело писать баг, как мне кажется. Это недоработка в С коде.
__bases__ менять можно. Насколько смело — вам решать. Кажется, в cpython проблем нет. В остальных реализациях, уверен, будут — не любят они этого.
Можно похачить Structure, унаследовавшись и добавив необходимые поля, засунув его обратно манки-патчингом. В результате не уверен.
Андрей Светлов
Если, конечно, я нигде не ошибаюсь.
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