Comment puis-je étendre les types Python intégrés avec des méthodes et des attributs personnalisés ?

Patricia Arquette
Libérer: 2024-10-24 17:01:02
original
375 Les gens l'ont consulté

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

Extension des types Python intégrés avec des méthodes et des attributs personnalisés

En Python, vous pouvez rencontrer des scénarios dans lesquels vous souhaitez étendre les types intégrés dans des types avec des méthodes ou des attributs supplémentaires. Cependant, modifier directement ces types n'est pas autorisé.

Par exemple, si vous essayez d'ajouter une méthode helloWorld() au type dict comme démontré en JavaScript, vous constaterez qu'une telle approche n'est pas prise en charge.

Solution de contournement utilisant le sous-classement et la substitution d'espace de noms

Bien que vous ne puissiez pas augmenter directement le type d'origine, il existe une solution de contournement intelligente. En sous-classant le type cible et en le remplaçant ensuite dans l'espace de noms intégré/global, vous pouvez efficacement imiter le comportement souhaité.

Voici une implémentation en Python :

<code class="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'</code>
Copier après la connexion

Dans cet exemple , la sous-classe mystr étend le type str en ajoutant une méthode first_last(). L'affectation __builtin__.str redirige tous les appels str intégrés pour utiliser la sous-classe modifiée à la place. En conséquence, les objets instanciés avec le constructeur str() intégré possèdent désormais la méthode first_last().

Cependant, il est crucial de noter que les objets créés à l'aide de la syntaxe littérale (« string ») resteront des instances de le type str non modifié et n'héritera pas des méthodes personnalisées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!