Maison  >  Article  >  développement back-end  >  Analyse des méthodes d'implémentation des types intégrés étendus Python

Analyse des méthodes d'implémentation des types intégrés étendus Python

黄舟
黄舟original
2017-10-17 10:26:341646parcourir

Cet article présente principalement la méthode d'extension des types intégrés en Python. Il analyse les techniques d'implémentation spécifiques de l'expansion des types intégrés intégrés et de l'expansion des sous-classes en Python sur la base d'exemples. Les amis dans le besoin peuvent se référer à cet article

L'exemple décrit comment Python implémente l'extension des types intégrés. Partagez-le avec tout le monde pour votre référence, comme suit :

Introduction

En plus d'implémenter de nouveaux types de méthodes objet, nous pouvons parfois également utilisez les types intégrés Extend Python pour prendre en charge d'autres types de structures de données, tels que l'ajout de méthodes d'insertion et de suppression de file d'attente aux listes. En réponse à ce problème, cet article présente deux méthodes pour étendre les types intégrés de Python en combinant des exemples d'implémentation de fonctions de collection : étendre les types en incorporant des types intégrés et étendre les types par sous-classement.

Étendu en incorporant des types intégrés

L'exemple suivant implémente un objet de collection en utilisant l'objet liste comme type intégré et ajoute une certaine surcharge des opérateurs. Cette classe encapsule les listes de Python, ainsi que les opérations d'ensemble supplémentaires.


class Set:
  def __init__(self, value=[]): # Constructor
    self.data = [] # Manages a list
    self.concat(value)
  def intersect(self, other): # other is any sequence
    res = [] # self is the subject
    for x in self.data:
      if x in other: # Pick common items
        res.append(x)
    return Set(res) # Return a new Set
  def union(self, other): # other is any sequence
    res = self.data[:] # Copy of my list
    for x in other: # Add items in other
      if not x in res:
        res.append(x)
    return Set(res)
  def concat(self, value): # value: list, Set...
    for x in value: # Removes duplicates
      if not x in self.data:
        self.data.append(x)
  def __len__(self):     return len(self.data) # len(self)
  def __getitem__(self, key): return self.data[key] # self[i]
  def __and__(self, other):  return self.intersect(other) # self & other
  def __or__(self, other):  return self.union(other) # self | other
  def __repr__(self):     return 'Set:' + repr(self.data) # print()
if __name__ == '__main__':
  x = Set([1, 3, 5, 7])
  print(x.union(Set([1, 4, 7]))) # prints Set:[1, 3, 5, 7, 4]
  print(x | Set([1, 4, 6])) # prints Set:[1, 3, 5, 7, 4, 6]

Extendre les types en sous-classant

À partir de Python 2.2, tous les types intégrés peut être directement sous-classé, comme list, str, dict et tuple. Cela vous permet de personnaliser ou d'étendre les types intégrés via des instructions de classe définies par l'utilisateur : sous-classez le nom du type et personnalisez-le. Les instances de sous-type d'un type peuvent être utilisées partout où le type intégré d'origine peut apparaître.


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!

Déclaration:
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