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

Как я могу расширить встроенные типы Python с помощью пользовательских методов и атрибутов?

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

How can I extend built-in Python types with custom methods and attributes?

Расширение встроенных типов Python с помощью пользовательских методов и атрибутов

В Python вы можете столкнуться со сценариями, в которых вам нужно расширить встроенные в типах с дополнительными методами или атрибутами. Однако прямое изменение этих типов недопустимо.

Например, если вы попытаетесь добавить метод helloWorld() к типу dict, как показано в JavaScript, вы обнаружите, что такой подход не поддерживается.

Обходной путь с использованием подклассов и замены пространства имен

Хотя вы не можете напрямую дополнить исходный тип, существует умный обходной путь. Создавая подкласс целевого типа и впоследствии подставляя его во встроенное/глобальное пространство имен, вы можете эффективно имитировать желаемое поведение.

Вот реализация на Python:

# Built-in namespace
import __builtin__

# Extended subclass
class mystr(str):
    def first_last(self):
        if self:
            return self[0]   self[-1]
        else:
            return ''

# Substitute the original str with the subclass on the built-in namespace    
__builtin__.str = mystr

print(str(1234).first_last())  # 14
print(str(0).first_last())  # 00
print(str('').first_last())  # ''

# Note that objects created by literal syntax will not have the extended methods
print('0'.first_last())  # AttributeError: 'str' object has no attribute 'first_last'

В этом примере подкласс mystr расширяет тип str, добавляя метод first_last(). Назначение __builtin__.str перенаправляет все встроенные вызовы str на использование измененного подкласса. В результате объекты, созданные с помощью встроенного конструктора str(), теперь обладают методом first_last().

Однако важно отметить, что объекты, созданные с использованием буквального синтаксиса («строка»), останутся экземплярами немодифицированный тип str и не будет наследовать пользовательские методы.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3