3

それは言われています:

クラス メソッド オブジェクトを生成する場合、im_class 属性と im_self 属性の両方が C であるバインドされたユーザー定義メソッド オブジェクトに変換されます。

参照

そして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と同じである必要があると書かれています。矛盾をどう説明する?

4

1 に答える 1

0

私はあなたと同じようにそれを読みました。Python が実際に行っていることは、ドキュメントに記載されているとおりではないようです。

im_selfクラスとim_classクラスの型、つまりそのメタクラスに設定します。Python のクラスのデフォルトのメタクラスはtype. これは、インスタンスにバインドされたメソッドで起こることと類似しています:im_selfはインスタンスでありim_class、インスタンスの型です。の場合、@classmethodつまり、クラスはインスタンスとして扱われます (つまり、のインスタンスですtype)。

おそらく、ドキュメントが更新されずに動作が変更されたか、ドキュメントが最初から間違っていた可能性があります。私は生計を立てるためにドキュメントを書いていますが、Python のサイズのドキュメントを 100% 正確に保つことはほとんど不可能であることを確認できます。特に、このようなあいまいな詳細については。

Python 開発者は、ドキュメントにバグを報告するための手順を用意しています。試してみてください

于 2012-02-02T04:43:30.963 に答える