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)
在调试模式下,我得到了。
是的。
但是当我在Mylist中重载 str 时(先前的代码相同)
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
”
在此之后,如果我在Mylist中删除 str (或 repr ),则一切正确。
我不明白,此实现中的 str 或 repr 方法有什么问题