Это академический вопрос, а не практический. Я пытаюсь углубиться в основы Python, и мне интересно :, могу ли я реализовать декораторы staticmethod
и classmethod
в чистом Python, если захочу?
Для staticmethod
, может быть, я мог бы сохранить ссылку на исходную функцию и вызвать ее, опуская первый аргумент?
Для classmethod
, возможно, я мог бы сохранить ссылку на исходную функцию и вызывать ее, передавая тип первого аргумента, а не сам аргумент? (Как бы я справился с вызовом непосредственно в классе?)
Опять же, я не хочу реализовывать это в своих программах; Я хочу узнать, как работает язык. Если это возможно, я был бы очень признателен за образцы кода. Если не,Я был бы признателен за объяснения, почему это невозможно сделать теоретически. Спасибо!
Изменить:Спасибо за ответ и за ссылку на дескриптор протокола! В качестве средства для дальнейшего расширения моего понимания Python я хотел бы задать еще два вопроса:
Можно ли это сделать без протокола дескриптора, например, реализуя в наших классах специальный метод __call __?
Одинаково ли работает протокол дескриптора в Python 2.7 и Python 3.x?
Спасибо еще раз!