我实现了自己的__getattr__()
,以松散地处理所有不存在的属性。
我碰巧在Jupyter笔记本中定义了该类,以进行交互式实验。
由于此_ipython_canary_method_should_not_exist_
实现,IPython创建了__getattr__
–并且我想了解这是什么以及如何“清理”它。 >
其中有this issue个已打开,但是我不清楚为什么-如果它检查__getattr__
内是否允许处理-它不会检查是否看到 _repr_html _ 是否在OP的示例中实现?
from types import SimpleNamespace
class Metabox(SimpleNamespace):
def __getattr__(self, name):
"""
Create a new namespace for any non-existing attributes.
"""
print("calling __getattr__")
self.__dict__[name] = Metabox()
return self.__dict__[name]
答案 0 :(得分:1)
如上述评论所述的锥度; IPython有时需要检查对象以了解它们是否具有某些方法。
处理像您这样的对象;总是说“是”,如果我们有疑问,我们会寻找这个名字;如果对象说“是的,我明白了!”我们知道对象位于并实现了__getattr__
。