diff --git a/Lib/test/test_xml_etree.py b/Lib/test/test_xml_etree.py --- a/Lib/test/test_xml_etree.py +++ b/Lib/test/test_xml_etree.py @@ -1910,6 +1910,18 @@ e = parser.close() self._check_sample1_element(e) + def test_subclass_init_override(self): + class MyTreeBuilder(ET.TreeBuilder): + def __init__(self, element_factory=None): + super().__init__(element_factory) + + tb = MyTreeBuilder() + parser = ET.XMLParser(target=tb) + parser.feed(self.sample1) + + e = parser.close() + self._check_sample1_element(e) + def test_element_factory(self): lst = [] def myfactory(tag, attrib): diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -2341,7 +2341,7 @@ self->data = NULL; } - if (self->element_factory) { + if (self->element_factory && self->element_factory != Py_None) { node = PyObject_CallFunction(self->element_factory, "OO", tag, attrib); } else { node = create_new_element(tag, attrib);