以下代码在Python 2和Python 3中的行为不同,我不确定原因。
class Dataset(object):
def __getattr__(self, item):
if not item in dir(self):
print(item)
a = Dataset()
a.Hello
Python 3 的结果如下:
> Hello
Python 2 的结果:
__members__
__members__
__methods__
...
无限递归直至达到递归层数的区别。"dir" 的行为有什么不同?
编辑:是否有解决方法?self.dict 是明显的选择,但它不包括函数,这在我的代码中是一个问题。
__getattr__()
根本不应该被调用(参见https://docs.python.org/2/reference/datamodel.html#object.__getattr__)。 - dhke