расширение модуля словаря в cpython для возврата произвольно именованных объектов - PullRequest
1 голос
/ 06 октября 2011

Мне было поручено реализовать интерфейс Python для нашего программного обеспечения для моделирования. Я извиняюсь, но это мое первое знакомство с питоном, так что это медленный процесс. Я работал в CPython

Вот моя проблема. Если пользователь вводит:

a = model_123456 (например), Я хотел бы вернуть соответствующий объект. Проблема в том, что эти объекты динамически создаются в программном обеспечении.

Я не хочу заполнять глобальные () дикты потенциально тысячами этих объектов, если они никогда не доступны.

Я не хочу реализовывать его как метод, например: a = getmodel (123456) поскольку мы стремимся к краткости, делая большинство доступа через атрибуты члена, а не методы.

Я изучал различные решения, но ни одно из них не кажется применимым или понятным (например, "gettr on the module")

Я думаю что мне нужно сделать, это создать словарь в моем модуле верхнего уровня, из которого я могу переопределить метод getitem?

Если это так, у меня возникли проблемы с выяснением, как это сделать в CPython.

Например: m = PyModule_Create (& tdmodule)
Вопрос 1: Это уже возвращает объект с установленным tp_dict. Как иначе установить / переопределить этот слот?

Вопрос 2. Как переопределить функцию getitem объекта PyDict в CPython (или создать словарь с таким же атрибутом)? Нужно ли создавать словарь с помощью специального метода getsubscript для Mapping или я могу просто установить setattr для setitem?

Опять мои извинения, если этот вопрос звучит запутанным и делает много неправильных предположений, вероятно, это так.

Спасибо за любые разъяснения, Роб.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...