Как @CristiFati предложил в комментариях, вы должны использовать здесь композицию.
class ExtendedElement:
def __init__(self, element):
self.element = element
def custom_method(self):
print(self.element.attrib)
ext = ExtendedElement(root)
ext.custom_method()
Тогда 2 утверждения будут работать с правильным чередованием:
assert root.attrib == ext.element.attrib
assert list(ext.element) == list(root)
Если вам действительно нужно list(ext)
на работу, тогда вы можете реализовать __iter__
:
def __iter__(self):
return iter(self.element)
, тогда второе утверждение будет работать следующим образом:
assert list(ext) == list(root)
В зависимости от ваших потребностей, вы можете взломать ExtendedElement
чтобы раскрыть все атрибуты element
, реализовав __getattr__
:
def __getattr__(self, name):
return getattr(self.element, name)
, тогда
ext = ExtendedElement(root)
print(ext.attrib)
выведет (с моим тестом. xml):
{'b': '1'}