Неизменяемые объекты в Python: за пределами базовых решений
Хотя стандартный класс кортежа обеспечивает неизменность, в этой статье рассматриваются более продвинутые методы создания неизменяемых объектов на чистом Python или с расширениями C.
Переопределение __setattr__: ограниченный подход
Одним из распространенных решений является переопределение метода setattr. Однако это предотвращает установку атрибута даже в функции init. Поэтому он может подходить не для всех сценариев.
Подкласс кортежа: частичное решение
Другой подход заключается в создании подкласса кортежа, предоставляя собственный новый метод и свойства для доступа к атрибутам. Однако этот метод не полностью предотвращает доступ к атрибутам через self[0] и self[1], что может быть неудобно.
Решение Nametuple: простота и совместимость
Более простое и надежное решение — использовать класс Nametuple из модуля коллекций Python:
Immutable = collections.namedtuple("Immutable", ["a", "b"])
Подобно предыдущему методу, здесь создается тип, производный от кортежа, и используется __slots__. Он предлагает несколько преимуществ:
Заключение
Класс Nametuple предоставляет удобный и эффективный способ создания неизменяемых объектов в Python. Это жизнеспособная альтернатива более продвинутым методам и предлагает дополнительные преимущества, такие как совместимость сериализации.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3