Я python новичок ie и, возможно, уже задавал много глупых вопросов, пожалуйста, простите меня. Я видел следующий код python для сортировки строк, и он работает очень хорошо. Но я сам не могу понять, как это работает. Я понимаю, что класс Predicate
наследует класс str
и перегружает метод объекта __lt__
(<), который позже используется в функции <code>sorted для проведения сортировки.
## code 1 ##
class Predicate(str):
def __lt__(self, other):
print(self, other)
return self + other < other + self
list_ = ['3', '30', '34', '5', '9']
sorted(list_, key=Predicate, reverse=True)
output:
['30', '3', '34', '5', '9']
Однако здесь вот чего я не понимаю: когда я вызываю Predicate(3)
, он возвращает "3"
, как этот процесс работает? Я ожидаю, что это будет примерно так:
## code 2 ##
class MyString(str):
def __init__(self, x):
self=str.__init__(x)
def __lt__(self, other):
return self + other < other + self
Поскольку я не использовал метод __new__
или __init__
, как в этом сообщении . Я хочу точно знать, как ввод 3
передается в класс Predicate()
и как "3"
генерируется и возвращается в коде 1 ? Я также пытаюсь заглянуть в str
class исходный код , но он находится в c и может быть для меня слишком сложным. Может ли кто-нибудь помочь мне с перевариванием наследования str
в Predicate
и процессом инициализации? Очень благодарен за вашу помощь и образование.