170 похожих чатов

>>> class MyClass: ... def __new__(*a, **k): ...

print('MyClass new', a, k)
... return object.__new__(*a, **k)
... def __init__(*a, **k):
... print('MyClass init', a, k)
... def __call__(*a, **k):
... print('MyClass call', a, k)
...
>>> obj = MyClass()
MyClass new (<class '__main__.MyClass'>,) {}
MyClass init (<__main__.MyClass object at 0x0000021D45B72AC0>,) {}

это на самом деле эквивалентно
>>> type.__call__(MyClass)
MyClass new (<class '__main__.MyClass'>,) {}
MyClass init (<__main__.MyClass object at 0x0000021D45B726D0>,) {}
<__main__.MyClass object at 0x0000021D45B726D0>
>>>

MyClass.__call__?

>>> obj()
MyClass call (<__main__.MyClass object at 0x0000021D45B72AC0>,) {}

эквивалентно:
>>> MyClass.__call__(obj)
MyClass call (<__main__.MyClass object at 0x0000021D45B72AC0>,) {}
>>>

10 ответов

9 просмотров

спасибо Зарт, надеюсь от этого говна поубавится

Экземпляр использует методы которые прописаны в теле класса на котором он создан. Если MyClass наследуется от type, то у MyClass должен быть метод __call__

Yaro
Экземпляр использует методы которые прописаны в те...

Он и есть. У родителя MyClass - type: In [8]: class MyClass: pass In [9]: MyClass.__call__ Out[9]: <method-wrapper '__call__' of type object at 0x2e97ca8>

evgeniy
Он и есть. У родителя MyClass - type: In [8]: cla...

Ты не понял. Экземпляр MyClass не сможет вызвать этот метод

Zart- Автор вопроса
Yaro
Ты не понял. Экземпляр MyClass не сможет вызвать э...

>>> class A: pass ... >>> A() <main.A object at 0x0000021D45B72B80> >>> A.call() <main.A object at 0x0000021D45B727F0> >>>

Yaro
Ты не понял. Экземпляр MyClass не сможет вызвать э...

Не может. Потому что у его базового класса (object) нет __call__, в отличие от класса type. У экземпляра одна цепочка mro, у класса другая.

У экземпляра нет MRO, ты смотришь MRO его класса

Yaro
У экземпляра нет MRO, ты смотришь MRO его класса

А как по твоему ищется метод у экземпляра? Ответ - по цепочке MRO его класса.

Похожие вопросы

Обсуждают сегодня

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
короче сгенерила мне эта штука код на ассемблере: struc string val { common local .value dq .value .value: if ~val eq db val end if db 0 } fo...
Vi Chapmann Chapmann
12
Всем привет! Массив вводится с клавиатуры, кол-во элементов неизвестно, поэтому я указал arr db 100 dup(?) С нахождением максимума проблем нет, а вот минимум почему-то всегд...
En Vind Av Sorg
11
Помогите, пожалуйста, делаю программу для для подсчёта корней квадратного уравнения, знаю, что есть куча недочётов, недоработок, но основная проблема в том, что почему-то при ...
NYC
13
#include <stdio.h> int main(void) { int n; scanf("%d", &n); int digits1[n] = {0}; int digits2[n] = {0}; я не могу таким образом заранее массив нулями заполнить?
Linus
12
в сях есть множество как в питоне? для удаление дубликатов
Linus
25
читать файл максимально быстро? странный вопрос))
zamtmn
53
я про форму записи. смысл указывать что 8 байтный регистр 8 байт?
Aiwan \ (•◡•) / _bot
10
Вроде бы вопрос уже заезжанный, но тем не менее У меня есть функция menu() которая выводит набор возможных действий, а затем спрашивает у пользователя что он хотел бы сделать....
David Golovatin
3
а как бы вылезти из ИО, что то типа IO -> Ether или в какую сторону смотреть ? что то туплю
Fedor
14
Карта сайта