Pythonic way to convert XML attribute to float, or else get None
It's a bit difficult to get None without writing an explicit conditional.  The next best option may be to go with float('nan') instead of -1 to make it harder to accidentally use it as a value.

self.radius = float(etree_elem.attrib.get('radius', 'nan'))


You can use math.isfinite() to test the existence of a value.  The self.radius &gt;= 0 test would also continue to work.