Я читал о функции repr () в python.Я думал о том, чтобы что-то экспериментировать, и думал об оценке вывода repr () внутри самого объекта, чтобы увидеть, к чему он ведет.Поэтому я написал следующий код:
class no :
def __init__(self,a) :
self.a = a
self.b = eval(repr(self))
k = no(2)
print(k.b.a)
Я ожидал, что к моменту вызова init объект уже будет создан.Мысль о создании нового объекта того же класса внутри одного уже созданного объекта.
Тем не менее, в строке:
k = no(2)
Я получаю сообщение об ошибке во время выполнения:
Traceback (most recent call last):
File "classofpy.txt", line 54, in <module>
k = no(2)
File "classofpy.txt", line 52, in __init__
self.b = eval(repr(self))
File "<string>", line 1
<__main__.no object at 0x0385F690>
^
Однако я не могу понять, почему это такжалоба на отсутствие объекта, когда к моменту вызова init объект уже был бы создан.
Однако при замене:
self.b = eval(repr(self))
на
self.b = self
все работает нормально.
В чем может быть причина такого поведения?Хотя семантически оба
self.b = self
и self.b = eval (repr (self))
означают одно и то же.Я думаю, что я могу ошибаться с точки зрения детализации, например, self.b = eval (repr (self)) может означать что-то другое с точки зрения структуры памяти и может означать не то же самое, что создание объекта-реплики, но такого родаэто то, для чего я отправляю этот вопрос.
Так почему
self.b = eval(repr(self))
приводит к ошибке времени выполнения?
(Кроме того, было бы весьма полезно узнать, как разработчики языка думают о разрешении или ограничении такихвиды заданий)