Вы неправильно понимаете, что делает наследование от list
.
Ваш Memwrap
не просто получает интерфейс list
, он является списком (который находится в памятиструктура как массив объектов Python, которые не могут быть непосредственно выражены в Python).Затем вы добавляете несколько дополнительных членов экземпляра и переопределяете некоторые list
методы для общения с вашими членами вместо обычных данных экземпляра list
(потому что вы никогда не вызываете реализации базового класса).Обратите внимание, что Memwrap
все еще содержит данные экземпляра, унаследованные от list
, но что касается данных, они остаются пустым списком со связанными атрибутами.
Бывает, что многие изОперации над встроенными типами реализованы в C и просто используют данные уровня C напрямую, а не через хуки уровня Python (например, __getitem__
).Таким образом, хотя этот вид наследования для интерфейса может работать для классов уровня Python (хотя на самом деле это хак), он обычно не для встроенных типов.Это, конечно, не то, что вы «должны» делать с типами создания подклассов;более вероятно, что вы создадите list
, который работает немного по-другому (вы можете добавить значения по умолчанию, дополнительные методы, метаданные и т. д.), чем то, что вы делаете совершенно другое, что разделяет интерфейс.Для этого посмотрите ABC в модуле collections
.
Я не понимаю, как вы можете использовать встроенную сортировку list
, не имея на самом деле list
.Предполагается, что отображаемые в память файлы должны быть быстрее, чем делать тонны небольших вызовов на уровне ОС, но для сортировки вы, по сути, читаете и переписываете все файлы в любом случае, так что я не могу понять, как вы получите этоидти быстрее, чем делать это;читать все файлы в память, сортировать их, а затем записывать результаты в файлы.
Ваш трюк с использованием mmaps для сортировки на месте файлов, содержащих куски данных фиксированного размера, довольно умен, новам действительно нужно использовать C полностью, чтобы заставить его работать и быть быстрым.В Python нет операции для сортировки файлов на месте (это довольно непонятная операция, поскольку это невозможно, если вы не предполагаете, что блоки данных имеют какой-то фиксированный размер), вы не можете получить сортировку list
, чтобы сделать это длявы, и реализация такого рода самостоятельно в Python обязательно будет медленнее, чем хорошая реализация на C.Тем не менее, это должна быть операция ввода-вывода, а не вычисления, так что вы уверены на самом деле можно сделать работу намного быстрее, чем пузырьковая сортировка?