Ich habe eine Frage dazu, wie Python die an sorted() übergebenen Methoden behandelt. Betrachten Sie das folgende kleine Skript:
#!/usr/bin/env python3
import random
class SortClass:
def __init__(self):
self.x = random.choice(range(10))
self.y = random.choice(range(10))
def getX(self):
return self.x
def getY(self):
return self.y
if __name__ == "__main__":
sortList = [SortClass() for i in range(10)]
sortedList = sorted(sortList, key = SortClass.getX)
for object in sortedList:
print("X:", object.getX(),"Y:",object.getY())
Dies ergibt eine ähnliche Ausgabe wie die folgende:
X: 1 Y: 5
X: 1 Y: 6
X: 1 Y: 5
X: 2 Y: 8
X: 2 Y: 1
X: 3 Y: 6
X: 4 Y: 2
X: 5 Y: 4
X: 6 Y: 2
X: 8 Y: 0
Dieses Skript sortiert die SortClass-Objekte nach dem Wert des x-Feldes der einzelnen Instanzen. Beachten Sie jedoch, dass das Argument "key" von sorted auf SortClass.getX verweist, nicht auf eine bestimmte Instanz von SortClass. Ich bin etwas verwirrt darüber, wie Python die als "key" übergebene Methode tatsächlich verwendet. Funktioniert der Aufruf von getX() auf diese Weise, weil die übergebenen Objekte vom gleichen Typ sind wie das Argument "self"? Ist dies eine sichere Verwendung des Arguments "Schlüssel"?