python 中的动态覆盖魔术方法
Dynamic overwriting magic methods in python
我正在为我编写的这段代码寻找合适的解决方案。我只是想有可能在我的 XML 还在构建的时候打印它。
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')
我们能够找到一个不干净的方法,但可以,所以你可以在这里看到我的想法:
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')
我的 class 需要是静态的,因为软件在整个 运行 期间不能处理超过一个实例,用户仍然必须在此期间创建多个 xml 运行(是的,这是一团糟,但我无能为力)。
我做了一些对我有用的事情,而不是做一些奇怪的事情:
class Child(Document):
def __str__(self):
return document.toprettyxml(encoding='UTF-8')
...所以这个 class 允许我打印
class MyClass(object):
def create_xml():
return Document()
...所有这些,因为我必须拥有
def main():
xml = MyClass.create()
print(xml)
...而只是
xml = Document()
对不起大家的困惑...我想我首先搞砸了这里的计划
不太懂,但是如果你想重写一个方法,就重写它:)
class XMLDoc(Document):
def __str__(self):
return self.toprettyxml(encoding='UTF-8')
myxml = XMLDoc([.. args ..])
print str(myxml)
为什么不只是子class Document
?
class MyDoc(Document):
def __str__(self):
return self.toprettyxml(encoding='UTF-8')
您还可以创建包装器 class:
class DocumentWrapper(object):
def __init__(self, doc):
self.doc = doc # doc should be a "Document".
def __str__(self):
return self.doc.toprettyxml(encoding='UTF-8')
我正在为我编写的这段代码寻找合适的解决方案。我只是想有可能在我的 XML 还在构建的时候打印它。
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')
我们能够找到一个不干净的方法,但可以,所以你可以在这里看到我的想法:
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')
我的 class 需要是静态的,因为软件在整个 运行 期间不能处理超过一个实例,用户仍然必须在此期间创建多个 xml 运行(是的,这是一团糟,但我无能为力)。 我做了一些对我有用的事情,而不是做一些奇怪的事情:
class Child(Document):
def __str__(self):
return document.toprettyxml(encoding='UTF-8')
...所以这个 class 允许我打印
class MyClass(object):
def create_xml():
return Document()
...所有这些,因为我必须拥有
def main():
xml = MyClass.create()
print(xml)
...而只是
xml = Document()
对不起大家的困惑...我想我首先搞砸了这里的计划
不太懂,但是如果你想重写一个方法,就重写它:)
class XMLDoc(Document):
def __str__(self):
return self.toprettyxml(encoding='UTF-8')
myxml = XMLDoc([.. args ..])
print str(myxml)
为什么不只是子class Document
?
class MyDoc(Document):
def __str__(self):
return self.toprettyxml(encoding='UTF-8')
您还可以创建包装器 class:
class DocumentWrapper(object):
def __init__(self, doc):
self.doc = doc # doc should be a "Document".
def __str__(self):
return self.doc.toprettyxml(encoding='UTF-8')