Какие вызовы в Python не могут вызывать `__call__`?Python

Программы на Python
Ответить
Anonymous
 Какие вызовы в Python не могут вызывать `__call__`?

Сообщение Anonymous »


Ответ на мой вопрос может зависеть от интерпретатора кода, хотя я не уверен. Если да, то я был бы рад услышать о любом широко используемом интерпретаторе Python, особенно, возможно, о CPython.

Если я реализую метод __call__ для класса C, то вызов экземпляра c из C вызовет c.__call__, который затем может, в свою очередь, использовать свой собственный метод __call__. Однако ясно, что не каждый вызываемый объект c всегда использует c.__call__, когда он вызывается в цепочке вызовов, такой как рассмотренный.

В качестве примера: вызов вызываемого(!) объекта get := vars(cls)["__get__"], где cls — это класс types.WrapperDescriptorType не всегда может полагаться на get.__call__, поскольку get имеет тип cls, и то же самое call := vars(cls)["__call__"]! (Если бы для получения get.__call__ требовался get.__get__, то для его получения потребовался бы вызов get, например get( получить, получить, cls) в какой-то момент.

На самом деле get.__call__ будет получен не как call.__get__(get, cls), а, видимо, как get(call, get, cls)< /код>.)

Вопрос. Учитывая вызываемый объект c, как узнать, всегда ли его вызов опирается на c.__call__? Мне нужен способ, который будет работать для всех ближайших версий Python, при этом более надежный способ нужен сильнее.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»