Je cherche une solution appropriée pour ce code que j'ai fait. Je veux juste avoir la possibilité d'imprimer mon XML pendant qu'il est en construction.Méthodes magiques d'écrasement dynamique en python
from xml.dom.minidom import Document, DOMImplementation
class MyClass(object):
init():
pass
def create_xml():
doc = Document()
# I know i cannot do that, I know. I need proper solution for that
doc.__str__ = self.print_doc
def print_doc(document):
return document.toprettyxml(encoding='UTF-8')
Nous sommes en mesure de trouver un moyen pas propre pour elle, qui fonctionne, de sorte que vous pouvez voir mon idée ici:
from xml.dom.minidom import Document, DOMImplementation
def create_xml():
doc = Document()
document.__str__ = partial(self.print_doc, document=document)
def print_doc(document):
return document.toprettyxml(encoding='UTF-8')
Ma classe doit être statique, en tant que logiciel ne peut pas gérer plus d'une instance pendant une exécution complète, l'utilisateur doit créer plus d'un xml pendant cette exécution (oui, c'est foiré, mais je ne peux pas aider). Au lieu de cela faire des choses bizarres, je l'ai fait smth qui fonctionne pour moi:
class Child(Document):
def __str__(self):
return document.toprettyxml(encoding='UTF-8')
... donc cette classe me permet d'imprimer
class MyClass(object):
def create_xml():
return Document()
... tout cela, beacause je dois avoir
def main():
xml = MyClass.create()
print(xml)
... au lieu que
xml = Document()
tout le monde Désolé pour la confusion ... Je suppose que raboter ici est ce que je foiré première
Vous voulez seulement faire ce que vous avez écrit parce que 'self' n'existe pas là. Essayez 'doc .__ str__ = print_doc'. – jonrsharpe
Votre prétendu code de travail n'est pas convivial car il ne fonctionne pas mais à part ça, je ne vois pas pourquoi vous dites que ce n'est pas humain. – Goyo