pythonがsorted()に渡されたメソッドをどのように処理するかについて質問があります。次の小さなスクリプトについて考えてみます。
#!/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())
これにより、次のような出力が得られます。
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
このスクリプトは、各インスタンスのxフィールドの値に従ってSortClassオブジェクトを並べ替えます。ただし、ソートされた「key」引数は、SortClassの特定のインスタンスではなく、SortClass.getXを指していることに注意してください。Pythonが「キー」として渡されたメソッドを実際にどのように使用するかについて少し混乱しています。渡されるオブジェクトは「self」引数と同じタイプであるため、このようにgetX()を呼び出すことはできますか?これは「キー」引数の安全な使用法ですか?