Так что да, это означает, что они создаются по требованию и, следовательно, будут иметь уникальный идентификатор. В остальном они просто больше экземпляров одного типа.

вы Python - это объекты, которые имеют__call__ метод. Они в большинстве случаев являются функциями времени, но также могут быть экземплярами классов.

Но бывает так, что функции имеют__call__ метод. Следовательно,__call__ метод имеет__call__ метод также. Следующая сессия REPL показывает, что мы можем__call__s:

>>> print
<built-in function print>

>>> print.__call__
<method-wrapper '__call__' of builtin_function_or_method object at 0x0000025E2D597F78>

>>> print.__call__.__call__
<method-wrapper '__call__' of method-wrapper object at 0x0000025E2F631438>

>>> print.__call__.__call__.__call__
<method-wrapper '__call__' of method-wrapper object at 0x0000025E2F5F85F8>

>>> print.__call__.__call__.__call__.__call__
<method-wrapper '__call__' of method-wrapper object at 0x0000025E2F725DA0> 

... и так далее. Примечательно, что все эти методы имеют разные адреса. Кроме того, они все имеют одинаковое поведение:

>>> print("a")
a
>>> print.__call__("a")
a
>>> print.__call__.__call__("a")
a
>>> print.__call__.__call__.__call__("a")

Итак, когда я пишуprint("a")что на самом деле называется? Этоprint, или жеprint.__call__? А что если я определюFoo класс с__call__ метод?

Кроме того, как это возможно, что каждый__call__ метод имеет свойразные __call__ метод? Может ли быть так, что они действительно были созданы, когда я пытался получить к ним доступ?

Ответы на вопрос(1)

Ваш ответ на вопрос