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

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Создание кортежа спама вместо списка спама из примера шаблона 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»