Как методы, `classmethod` и` staticmethod` реализованы в Python? - PullRequest
20 голосов
/ 14 июля 2011

В какой момент методы в Python приобретают свойство get?- Как только они будут определены в классе?Почему Python позволяет мне определять метод без каких-либо аргументов (даже без первого self аргумента)?

Я знаю, как использовать classmethod и staticmethod, и я знаю, что они встроены.в функциях, но что происходит с функцией, которая так украшена?

По сути, я задаюсь вопросом о "магии", которая происходит между определением класса и созданием класса.

1 Ответ

24 голосов
/ 14 июля 2011

Проверьте это.

http://docs.python.org/howto/descriptor.html#static-methods-and-class-methods

Вы также можете взглянуть на исходный код для объектов класса и статических методов в funcobject.c:

http://hg.python.org/cpython/file/69b416cd1727/Objects/funcobject.c

Определение объекта метода класса начинается со строки 694, в то время как определение объекта статического метода начинается со строки 852. (Я нахожу довольно забавным, что в funcobject.c есть элементы с названием «method», когда также существует methodobject.c.)

...