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

Что-То не так видимо понял 1) почему не вызывается ни один

из инитов?
2) почему, хотя мы вывали __new__ класса B, нет его метода?

class A:
def __init__(self):
print("init a")

def show_a(self):
print("a")

class B:
def __init__(self):
print("init b")

def show_b(self):
print("b")


a = B.__new__(A) # ничего не выводит (почему не вызывается инит?)
a.show_a() # a
a.show_b()

#Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# AttributeError: 'A' object has no attribute 'show_b'. Did you mean: 'show_a'?

3 ответов

26 просмотров

>> ничего не выводит (почему не вызывается инит?) скорее вего базовая реализация создает класс не вызывая __init__. Памятуя, что все в питоне наследник object, а он наследник type, а последний - конструктор классов на лету, то object.__new__(A) выполняет что-то вроде type("A", (A, ), {...}) не вызывая твой A.__init__. Но это надо исходники питона смотреть так-то. В твоем случае, у B нет своего new, поэтому вызывается type("B", (A, ), {}) То есть налету создается новый класс с __class__.__name__ == "B", который наследник А, а у А нет методов, которые ты описал в В — Если интересно: class A: def __init__(self): print("init A") object.__new__ is type.__new__ # False A.__new__ is object.__new__ # True Но что там под капотом у object.__new__ и type.__new__ - не знаю.

Сергей- Автор вопроса
Wanna_Phonila
>> ничего не выводит (почему не вызывается инит?) ...

спасибо, всё сложнее в общем чем думал надо будет почитать во Fluent Python

Wanna_Phonila
>> ничего не выводит (почему не вызывается инит?) ...

> В твоем случае, у B нет своего new, поэтому вызывается type("B", (A, ), {}) То есть налету создается новый класс с __class__.__name__ == "B", который наследник А, а у А нет методов, которые ты описал в В Не, совсем не то >>> a = B.__new__(A) >>> type(a) is A True

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта