Can the staticmethod and classmethod decoraters be implemented in pure Python?

Viewed 2075

This is an academic question, more than a practical one. I'm trying to delve into the foundations of Python, and I wonder: could I implement the staticmethod and classmethod decorators in pure Python if I wanted to?

For staticmethod maybe I could keep a reference to the original function and call it omitting the first argument?

For classmethod maybe I could keep a reference to the original function and call it passing the type of the first argument, rather than the argument itself? (How would I handle it being called directly on the class?)

Again, it's not that I want to actually implement it in my programs; I want to learn how the language works from it. If it's possible to do I would really appreciate code samples. If not, I would appreciate explanations why it can't be done theoretically. Thanks!

Edit: Thanks for the answer and for the reference to the descriptor protocol! As a means to further extend my understanding of Python I'd like to ask two more things:

  • Could this be done without the descriptor protocol, for example by implementing the __ call __ special method in our classes?

  • Does the descriptor protocol work the same way in Python 2.7 and in Python 3.x?

Thanks again!

2 Answers
Related