dir(element) returns 不存在的元素。尝试使用 getattr(element, ...) 失败
dir(element) returns non-existing element. Trying to use getattr(element, ...) fails
基本上我做的是:
attrs = dir(oe)
for attr in attrs:
attr_obj = getattr(oe, attr)
.... more code ...
但是 getattr
调用失败并显示:AttributeError: no such child: comment
oe
是 lxml.objectify
库的 ObjectifiedElement
。
当我用 PyCharm 查看 oe
时,它显示了 comment
属性,但也无法解析它。
这是怎么回事? dir
这个属性不存在的时候怎么显示呢?
我不是专家,但 lxml 可能会重新定义 __getattr__
。来自他们的源代码:
def __getattr__(self, tag):
u"""Return the (first) child with the given tag name. If no namespace
is provided, the child will be looked up in the same one as self.
"""
if is_special_method(tag):
return object.__getattr__(self, tag)
return _lookupChildOrRaise(self, tag)
见https://github.com/lxml/lxml/blob/master/src/lxml/lxml.objectify.pyx
此外,关于dir
方法,你有:
目录([对象])
没有参数,return 当前本地范围内的名称列表。使用参数,尝试 return 该对象的有效属性列表。
如果对象有一个名为 dir() 的方法,将调用此方法并且必须 return 属性列表。这允许实现自定义 getattr() 或 getattribute() 函数的对象自定义 dir() 报告其属性的方式。
如果对象没有提供dir(),函数会尽力从对象的dict属性中收集信息,如果定义,并从其类型对象。结果列表不一定完整,并且当对象具有自定义 getattr().
时可能不准确
基本上我做的是:
attrs = dir(oe)
for attr in attrs:
attr_obj = getattr(oe, attr)
.... more code ...
但是 getattr
调用失败并显示:AttributeError: no such child: comment
oe
是 lxml.objectify
库的 ObjectifiedElement
。
当我用 PyCharm 查看 oe
时,它显示了 comment
属性,但也无法解析它。
这是怎么回事? dir
这个属性不存在的时候怎么显示呢?
我不是专家,但 lxml 可能会重新定义 __getattr__
。来自他们的源代码:
def __getattr__(self, tag):
u"""Return the (first) child with the given tag name. If no namespace
is provided, the child will be looked up in the same one as self.
"""
if is_special_method(tag):
return object.__getattr__(self, tag)
return _lookupChildOrRaise(self, tag)
见https://github.com/lxml/lxml/blob/master/src/lxml/lxml.objectify.pyx
此外,关于dir
方法,你有:
目录([对象]) 没有参数,return 当前本地范围内的名称列表。使用参数,尝试 return 该对象的有效属性列表。
如果对象有一个名为 dir() 的方法,将调用此方法并且必须 return 属性列表。这允许实现自定义 getattr() 或 getattribute() 函数的对象自定义 dir() 报告其属性的方式。
如果对象没有提供dir(),函数会尽力从对象的dict属性中收集信息,如果定义,并从其类型对象。结果列表不一定完整,并且当对象具有自定义 getattr().
时可能不准确