Python 如何从列表中创建和检索类对象
我有以下类型的xml:Python 如何从列表中创建和检索类对象,python,python-3.4,Python,Python 3.4,我有以下类型的xml: <?xml version="1.0" encoding="UTF-8"?> <RootNode> <childElem> <prop1 type="int">1</prop1> <prop2 type="int">2</prop2> </childelem> <childElem> <prop1 type="int">3</prop1> &
<?xml version="1.0" encoding="UTF-8"?>
<RootNode>
<childElem>
<prop1 type="int">1</prop1>
<prop2 type="int">2</prop2>
</childelem>
<childElem>
<prop1 type="int">3</prop1>
<prop2 type="int">4</prop2>
</childelem>
<childElem>
<prop1 type="int">5</prop1>
<prop2 type="int">6</prop2>
</childelem>
<childElem>
<prop1 type="int">7</prop1>
<prop2 type="int">8</prop2>
</childelem>
</RootNode>
1.
2.
3.
4.
5.
6.
7.
8.
我已经定义了类来将所有子元素存储为类的不同实例。
我试图将对象附加到列表中,然后检索
在这个xml中,总共有4个子元素。
创建每个对象后,我已打印每个对象的属性。
在这里,我看到每个对象都有不同的属性值
但在那之后,当我试图在for循环中从列表中检索每个对象并打印每个检索到的对象的属性时,它会打印最后一个childelem对象四次
下面是代码片段
def getObjects(self,xmlStr,elem):
objList = []
root = ET.fromstring(xmlStr)
rootNode = root.find(elem)
for obj in rootNode.findall('childElem'):
myObj = Obj()
for props in obj:
myObj.populate(props.tag,props.text)
print(">>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<")
print(myObj.getProps())
print(">>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<")
objList.append(myObj)
for obj1 in objList:
print(obj1.getProps())
print("@@@@@@@@@@@@@@@@@@@@@@@@@@")
return objList
class Obj:
properties = {}
def populate(self,name,value):
self.properties[name] = value
def getProps(self)
return self.properties
def getObjects(self、xmlStr、elem):
对象列表=[]
root=ET.fromstring(xmlStr)
rootNode=root.find(元素)
对于rootNode.findall('childElem')中的obj:
myObj=Obj()
对于obj中的道具:
填充(props.tag、props.text)
打印(“>>>>>>>>>>>>>>>>您正在类上的Obj
的不同实例之间共享一个可变字典。如果将其更改为实例变量(通过在Obj.\uu init\uu
中设置self.properties
),则代码应按您的意愿工作:
class Obj:
def __init__(self):
self.properties = {}
# The rest of Obj's methods.
目前,您的代码创建了一个字典,Obj.properties
(仍然可以通过实例上的self.properties
访问该字典)。然后,myObj.populate
调用该字典的每次更新,因此最后一个元素的详细信息将打印4次。能否将populate和getProps方法的代码发布在此处?能否显示输出?添加了populate和getProps的代码,还添加了输出
class Obj:
def __init__(self):
self.properties = {}
# The rest of Obj's methods.