Мой вопрос довольно прост, у меня есть:
class upperstr(str):
def __new__(cls, arg):
return str.__new__(cls, str(arg).upper())
Почему, если мой метод __new__()
напрямую использует экземпляр неизменяемого типа (str), экземпляры моего нового типа (upperstr)являются изменяемыми?
>>> s = str("text")
>>> "__dict__" in dir(s)
False
>>> s = upperstr("text")
>>> "__dict__" in dir(s)
True
На каком этапе интерпретатор устанавливает атрибут __dict__ в значения upperstr, если я переопределяю только метод __new __ ()?
Спасибо!