Analyse der Implementierungsmethoden erweiterter integrierter Python-Typen

黄舟
Freigeben: 2017-10-17 10:26:34
Original
1639 Leute haben es durchsucht

Dieser Artikel stellt hauptsächlich die Methode zum Erweitern integrierter Typen in Python vor und analysiert die spezifischen Implementierungstechniken der in Python eingebetteten integrierten Typerweiterung und Unterklassenerweiterung in Form von Beispielen. Freunde in Not können sich auf diesen Artikel beziehen

Das Beispiel beschreibt, wie Python die Erweiterung integrierter Typen implementiert. Teilen Sie es wie folgt als Referenz mit allen:

Einführung

Zusätzlich zur Implementierung neuer Arten von Objektmethoden können wir manchmal auch Folgendes tun Erweitern Sie die in Python integrierten Typen, um andere Arten von Datenstrukturen zu unterstützen, z. B. das Hinzufügen von Methoden zum Einfügen und Löschen von Warteschlangen zu Listen. Als Reaktion auf dieses Problem stellt dieser Artikel zwei Methoden zum Erweitern der integrierten Python-Typen vor, indem Beispiele für die Implementierung von Sammlungsfunktionen kombiniert werden: das Erweitern von Typen durch Einbetten integrierter Typen und das Erweitern von Typen durch Unterklassen.

Erweitert durch Einbetten integrierter Typen

Das folgende Beispiel implementiert ein Sammlungsobjekt, indem das Listenobjekt als eingebetteter Typ verwendet wird, und fügt hinzu Einige Bediener überlasten. Diese Klasse umschließt Pythons Listen sowie zusätzliche Mengenoperationen.


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]
Nach dem Login kopieren

Typen durch Unterklassen erweitern

Ab Python 2.2 alle integrierten Typen kann direkt in Unterklassen unterteilt werden, z. B. list, str, dict und tuple. Dadurch können Sie integrierte Typen durch benutzerdefinierte Klassenanweisungen anpassen oder erweitern: Erstellen Sie eine Unterklasse des Typnamens und passen Sie ihn an. Untertypinstanzen eines Typs können überall dort verwendet werden, wo der ursprüngliche integrierte Typ auftreten kann.


class Set(list):
  def __init__(self, value = []):   # Constructor
    list.__init__([])        # Customizes list
    self.concat(value)        # Copies mutable defaults
  def intersect(self, other):     # other is any sequence
    res = []             # self is the subject
    for x in self:
      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 = Set(self)         # Copy me and my list
    res.concat(other)
    return res
  def concat(self, value):       # value: list, Set . . .
    for x in value:         # Removes duplicates
      if not x in self:
        self.append(x)
  def __and__(self, other): return self.intersect(other)
  def __or__(self, other): return self.union(other)
  def __repr__(self):    return 'Set:' + list.__repr__(self)
if __name__ == '__main__':
  x = Set([1,3,5,7])
  y = Set([2,1,4,5,6])
  print(x, y, len(x))
  print(x.intersect(y), y.union(x))
  print(x & y, x | y)
  x.reverse(); print(x)
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonAnalyse der Implementierungsmethoden erweiterter integrierter Python-Typen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!