方法は、基礎となる関数が呼び出されたときに渡されるインスタンスを保持する属性、__self__
を、持っています。どうやら、組み込み関数もそうです。一方で、彼らはNone
を保持し、Pythonの2では組み込み関数の__self__が、それが属する組み込みモジュールを返すのはなぜですか?
>>> len.__self__
<module 'builtins' (built-in)>
>>> sys.getrefcount.__self__ # also for other builtin modules
<module 'sys' (built-in)>
:Pythonの3では
は、彼らがモジュールオブジェクトを保持矛盾がここにありますなぜ
は>>> type(len.__self__)
<type 'NoneType'>
>>> sys.getrefcount.__self__
<type 'NoneType'>
は誰でも知っていますか?それに加えて、なぜこれらも__self__
を持っていないと__self__
属性が不足しているPythonのレベルのモジュールの機能を好きではないされています
>>> from pprint import pprint
>>> pprint.__self__
AttributeError: 'function' object has no attribute '__self__'
彼らは組み込み関数は(通常の)内蔵方法とタイプを共有するため 'self'を有し、内蔵の方法' __self__'を有します。しかし、なぜPython 3では '__self__'が' None'でないのか分かりません。 – user2357112
私はそれが意図的ではなかったと思うし、彼らはただその変更に気付かなかったが、私は言うことができない。ソースにはそれに関するコメントはないようで、それに関するメーリングリストの会話が見つからないか、それを証明することは難しいでしょう。 – user2357112
@ user2357112私はそれらが実際に同じオブジェクトであることに気づくべきでした、私は本当に*私がそれを逃したとは信じられません。ありがたいことに、少なくともトラッカーを掘り下げて最初の部分についての説明を見つけましたが、 'Python 3'では' self'が 'None'にならないという奇妙な選択のようです。 –