2012-02-02 2 views
3

Говорят, что:Python Модель данных: запутаться снова classmethod

Когда уступит объект метод класса, он превращается в связанного объекта определяемого пользователем метода которого im_class и im_self атрибуты оба C.

в Reference

И я сделал EX.

>>> class C(object) : 
...  @classmethod 
...  def cm(cls) : print cls 
... 
>>> C.cm 
<bound method type.cm of <class '__main__.C'>> 
>>> C.cm.im_self 
<class '__main__.C'> 
>>> C.cm.im_class 
<type 'type'> 

Мне не сложно понять это явление. Но, к сожалению, в ссылке говорится, что im_self должен быть тот же как im_class. Как объяснить непоследовательность?

ответ

0

Я читал так, как и вы. Похоже, что то, что на самом деле делает Python, не совсем то, что говорит документация.

Он устанавливает im_self классу и im_class классу, т. Е. Его метаклассу. Метакласс по умолчанию для классов в Python равен type. Это аналогично тому, что происходит с методами, связанными с экземплярами: im_self - это экземпляр, а im_class - тип экземпляра. В случае @classmethod, другими словами, класс рассматривается как экземпляр (который он есть, это пример type).

Возможно, поведение было изменено без обновления документации, или с самого начала была неправильная документация. Я пишу документацию для жизни, и я могу подтвердить, что почти невозможно сохранить ее на 100% правильной для чего-то размером Python - особенно для неясных деталей, подобных этой.

У разработчиков Python есть процедура для сообщения об ошибках в документации. Give it a try!

+0

Спасибо за предложение! Я отправил электронное письмо разработчикам. Надеюсь, они скоро ответят! – Determinant

+0

У меня не было ответа, так как я отправил его. Не могли бы вы отправить его? – Determinant

Смежные вопросы