class MyList:
def __init__(self, start=[]):
print('__init__ method')
self.list = list(start)
if __name__ == '__main__':
M = MyList([2,4,7,8,9,2,3,4])
print(M.list)
В режиме отладки я получаю это.
Это верно.
Но когда я перегружаю str в Mylist (предыдущий код такой же)
def __str__(self):
return "__repr__ method: {0}".format(self.list)
Я получаю это
Если я заменю str на repr метод в классе ничего не меняет.
Но если я добавлю getattr и setattr
class MyList:
def __init__(self, start=[]):
print('__init__ method')
self.list = list(start)
def __repr__(self):
return "__repr__ method: {0}".format(self.list)
def __getattr__(self, item):
print('__getattr__ method')
return getattr(self.list, item)
def __setattr__(self, key, value):
print('__setattr__ method')
if key == 'boolAttr':
self.__dict__['boolAttr'] = False
else:
self.__dict__[key] = value
if __name__ == '__main__':
M = MyList([2,4,7,8,9,2,3,4])
print(M.list)
Python падает, и я получаю зацикленное сообщение "__getattr__ method
"
После этого, если я удаляю str (или repr ) в Mylist, все верно.
Я не понимаю этогочто не так в str или repr методах в этой реализации