gpt4 book ai didi

python - 字典扩展父类(super class)的完整表示

转载 作者:太空宇宙 更新时间:2023-11-03 19:10:40 25 4
gpt4 key购买 nike

鉴于此代码:

class XmlObj(dict):
def __init__(self,xml,*args,**kwargs):
super(dict,self).__init__(*args,**kwargs)
if xml.firstChild.nodeName == '#text':
self.__setattr__( 'text', xml.firstChild.nodeValue )
return
else:
for node in xml.childNodes:
if self.has_key( node.nodeName ):
item = self.__getitem__(node.nodeName)
if type( item ) is not type( [] ):
item = [item]
item.append( XmlObj( node ))
self.__setitem__(node.nodeName, item )
else:
self.__setitem__(node.nodeName, XmlObj(node) )

def __str__(self):
if hasattr(self,'text'):
return self.__getattribute__('text')
else:
return "%s"%super(dict,self).__str__()

text = """<?xml version="1.0"?><response><success>true</success><message>Metric List</message><page>1</page><rpp>50</rpp><total>9</total><pages>1</pages></response>"""
obj = XmlObj( parseString( text ).documentElement )
print obj
print obj['rpp']

>>> {u'rpp': {}, u'success': {}, u'pages': {}, u'message': {}, u'total': {}, u'page': {}}
>>> 50

我想得到:

>>> {u'rpp': '50', u'success': True, u'pages': 4, u'message': 'Some message', u'total': 90, u'page': 1}

我只是想知道Python如何处理对象的__repr__调用,只是为了让里面的obj参数显示text属性而不是空字典。

最佳答案

经过一番谷歌搜索终于找到了答案,仅供引用,我将在这里发布答案

http://effbot.org/pyfaq/how-can-i-get-a-dictionary-to-display-its-keys-in-a-consistent-order.htm

class XmlObj(dict):
def __init__(self,xml,*args,**kwargs):
super(dict,self).__init__(*args,**kwargs)
if xml.firstChild.nodeName == '#text':
self.__setattr__( 'text', xml.firstChild.nodeValue )
return
else:
for node in xml.childNodes:
if self.has_key( node.nodeName ):
item = self.__getitem__(node.nodeName)
if type( item ) is not type( [] ):
item = [item]
item.append( XmlObj( node ))
self.__setitem__(node.nodeName, item )
else:
self.__setitem__(node.nodeName, XmlObj(node) )

def __repr__(self):
if hasattr(self,'text'):
return self.__getattribute__('text')
else:
result = ["%r: %r" % (key, self[key]) for key in sorted(self)]
return "{" + ", ".join(result) + "}"

__str__ = __repr__

无论如何,谢谢大家:)

关于python - 字典扩展父类(super class)的完整表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13067905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com