Создание spamtuple вместо спамлиста из примера шаблона xxsubtype.c CPython.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Создание spamtuple вместо спамлиста из примера шаблона xxsubtype.c CPython.

Сообщение Anonymous »

В процессе изучения C API для CPython я хотел изменить пример шаблона xxsubtype.c, который содержит спамлист и спамдикт, чтобы создать спамтупле. Я считаю, что это не работает напрямую, поскольку кортежи неизменяемы и поэтому вы не можете использовать tp_init. Я считаю, что вам нужно использовать tp_new. Цель состоит в том, чтобы следующий код Python работал:

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

import xxsubtype
s = xxsubstype.spamtuple((1,2,3))
На данный момент я изменил список спама на spamtuple; измените Py_List_Type на Py_Tuple_Type и т. д., а затем добавьте spamtuple_new:

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

static PyObject *
spamtuple_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
{
spamtupleobject *self;

self = (spamtupleobject *)PyTuple_Type.tp_new(type, args, kwds);
if (self != NULL) {
self->state = 0;  // Initialize custom attributes
}
return (PyObject *)self;
}
Затем обновите spamtuple_type с помощью

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

static PyTypeObject spamtuple_type = {
PyVarObject_HEAD_INIT(DEFERRED_ADDRESS(&PyType_Type), 0)
"xxsubtype.spamtuple",
sizeof(spamtupleobject),
0,
0,                                          /* tp_dealloc */
...
(initproc)spamtuple_init,                    /* tp_init */
0,                                          /* tp_alloc */
spamtuple_new,                              /* tp_new */
};

Когда я загружаю модуль в Python и пытаюсь

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

s = xxsubstype.spamtuple((1,2,3))
Я получаю ошибку сегментации. Ищу помощь в целом, как принимать кортежи в качестве аргументов. В конечном итоге я хотел бы иметь возможность сделать:

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

s = xxsubtype.spamtuple((1,2,3), data=data)
где данные — это кортеж или ссылка на класс. Любая помощь будет оценена по достоинству.

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

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

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

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

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

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

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