Можно ли смешивать ctypes.structure с регулярными полями Python?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Можно ли смешивать ctypes.structure с регулярными полями Python?

Сообщение Anonymous »

Просто идти по прямым путем, похоже, не работает в Python 3. < /p>

Код: Выделить всё

import ctypes

class cA(ctypes.Structure):
_fields_ = [("a", ctypes.c_ubyte)]

def __init__(self):
super().__init__()
self.c = 3

z = cA.from_buffer_copy(b'0')
print (z)
print (z.c)
print (dir(z))
< /code>
Traceback (most recent call last):
File "polymorph.py", line 12, in 
print (z.c)
AttributeError: 'cA' object has no attribute 'c'
< /code>
So ctypes.Structure
factory classmethod from_buffer_copy () , похоже, не использует конструктор по умолчанию __init __ .
это правильным и предназначенным для ctypes.structure ? /> Нравится добавление в класс CA: < /p>

Код: Выделить всё

@classmethod
def from_buffer_copy(cls,buffer, offset=0):
#obj = super().from_buffer_copy(b'2',offset)
obj = cls.from_buffer_copy(b'2',offset)
obj.__init__()
return obj
< /code>
Traceback (most recent call last):
File "polymorph.py", line 17, in 
z = cA.from_buffer_copy(b'0')
File "polymorph.py", line 13, in from_buffer_copy
obj = cls.from_buffer_copy(b'2',offset)
File "polymorph.py", line 13, in from_buffer_copy
obj = cls.from_buffer_copy(b'2',offset)
File "polymorph.py", line 13, in from_buffer_copy
obj = cls.from_buffer_copy(b'2',offset)
[Previous line repeated 996 more times]
RecursionError: maximum recursion depth exceeded
< /code>
This creates a RecursionError
, поскольку тот же метод класса вызывается снова и снова, но structor.from_buffer_copy также не может быть вызван, потому что ему не хватает _fields _ .
Использование Super () выше не помогает. Это повышает атрибут :

Код: Выделить всё

Traceback (most recent call last):
File "polymorph.py", line 17, in 
z = cA.from_buffer_copy(b'0')
File "polymorph.py", line 12, in from_buffer_copy
obj = super().from_buffer_copy(b'2',offset)
AttributeError: 'super' object has no attribute 'from_buffer_copy'
< /code>
This seems to be similar to Using super with a class method
Looks like a special Python 3 thing either.
So ctypes.Structure< /code> кажется настоящим особенным классом.
, как делать то же самое с обычным классом Python, не является проблемой.
нравится: < /p>
import ctypes

class A:
def __init__(self):
self.a = "Tex"

@classmethod
def factory(cls):
return cls()

class B(A):
def __init__(self):
super().__init__()
self.b = "bTex"

z = B.factory()
print (z)
print (z.b)
print (dir(z))
< /code>
So ... Is there a way to mix ctypes.Structure
с регулярными полями класса Python или лучше, просто не делайте этого, и лучше встраивает ctypes.structure В других обычных классах для этого просто для того, чтобы обойти это?

Подробнее здесь: https://stackoverflow.com/questions/795 ... hon-fields
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»