Расширение встроенных типов Python с помощью пользовательских атрибутов и методов
В Python расширение встроенных типов, таких как словари, с помощью пользовательских методов или атрибутов может показаться простой просьбой. Однако конструкция Python изначально не поддерживает такие модификации. В отличие от механизма наследования прототипов JavaScript, встроенные типы Python являются статическими и неизменяемыми. Возможно, вы можете добиться аналогичного эффекта, создав подкласс типа и подставив его в глобальное пространство имен. Это позволяет вам добавлять собственные атрибуты и методы к экземплярам нового подкласса.
Например, предположим, что мы хотим добавить метод helloWorld() к типу dict. Мы можем создать следующий подкласс:
class mydict(dict): защита helloWorld(self): # Реализация собственного метода print("Hello world from mydict!")Чтобы заменить встроенный dict нашим подклассом, мы можем использовать модуль __builtin__:class mydict(dict):
def helloWorld(self):
# Custom method implementation
print("Hello world from mydict!")
Использование и ограничения
import __builtin__
__builtin__.dict = mydict
d = dict() d.helloWorld() # Выводит «Hello world from mydict!»
Однако важно отметить, что объекты, созданные с использованием буквального синтаксиса, по-прежнему будут экземплярами исходного типа dict и не будут иметь ваших пользовательских методов или атрибутов. :d = dict()
d.helloWorld() # Outputs "Hello world from mydict!"
Это связано с тем, что литеральный синтаксис обходит процесс построения объекта и напрямую создает экземпляры встроенных типов. Чтобы преодолеть это ограничение, вы можете определить функцию, которая преобразует встроенные объекты в экземпляры вашего подкласса:d = {}
d.helloWorld() # Raises AttributeError
Затем используйте функцию вместо буквального синтаксиса для создания словарей: d = my_dict({})
d.helloWorld() # Выводит «Привет, мир от mydict!»
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3