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]
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)
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!