«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как добавить собственные атрибуты и методы во встроенные типы Python?

Как добавить собственные атрибуты и методы во встроенные типы Python?

Опубликовано 20 ноября 2024 г.
Просматривать:505

How can I add custom attributes and methods to built-in Python types?

Расширение встроенных типов 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