Методы на классах - это просто функции.
class MyClass(object):
... def my_method(self): pass
...
>>> MyClass.my_method
<function my_method at 0x661c38>
Когда вы выбираете метод из экземпляра класса, Python использует магию (называемую дескрипторами), чтобы вернуть связанный метод. Связанные методы автоматически вставляют экземпляр в качестве первого аргумента при их вызове.
>>> MyClass().my_method
<bound method MyClass.my_method of <__main__.myClass object at 0x6e2498>>
Однако, как вы заметили, вы также можете напрямую вызвать функцию с экземпляром в качестве первого аргумента: MyClass.my_method(MyClass())
Вот что происходит с sorted()
. Python вызывает функцию SortedClass.getx с элементом в списке, который является экземпляром SortedClass.
(Кстати, есть лучшие способы сделать то, что вы делаете. Прежде всего, не используйте методы для предоставления таких атрибутов, как getX
. Используйте свойства или простые атрибуты. Также посмотрите на operator.itemgetter
operator.methodcaller
.)