У методов есть атрибут __self__
, который содержит экземпляр, который должен быть передан при вызове базовой функции. По-видимому, так делают встроенные функции.
В Python 3 они хранят объект модуля:
>>> len.__self__
<module 'builtins' (built-in)>
>>> sys.getrefcount.__self__ # also for other builtin modules
<module 'sys' (built-in)>
В Python 2, с другой стороны, они содержат None
:
>>> type(len.__self__)
<type 'NoneType'>
>>> sys.getrefcount.__self__
<type 'NoneType'>
Кто-нибудь знает, почему здесь существует несоответствие? В дополнение к этому, почему у них даже есть __self__
и они не похожи на функции модуля уровня Python, которые не имеют атрибута __self__
:
>>> from pprint import pprint
>>> pprint.__self__
AttributeError: 'function' object has no attribute '__self__'