Ich hab auf jeden Fall zwei Vorschläge zur Verbesserung:
Für die __init__ in XML_Type, die ich folgendermaßen aufbauen würde:
Code: Alles auswählen
def __init__(cls, name, bases, cdict):
tag_name = cdict.get("xml_tag_name", name)
setattr(cls,"xml_tag_name", tag_name)
if cls.__xml_classes.has_key(tag_name) and cls.__xml_classes[tag_name] is not cls:
raise TypeError("%s already exists!" % name)
super(XML_Type, cls).__init__(name, bases, cdict)
cls.__xml_classes[tag_name] = (cls, cls.xml_attributes, None)
cls.xml_stack = []
Für das Escapen von "<", ">" und "&" würd ich eher xml.sax.saxutils.escape bzw xml.sax.saxutils.unescape nehmen. Die sind zwar im wesentlichen das gleiche wie bei dir, jedoch kosten die Mehrfachverkettungen von replace ( .replace("&","&").replace(...).replace(...)) gleich 3 mal soviel Speicher, da der Garbage Collector zwischen den Schritten nicht arbeitet.
Sonst hab ich nix weiter zu bemängeln (), aber es soll ja auch ein erstklassiges Modul werden .
mfg, Milan