Ich möchte die Funktionalität der for-Schleife umhüllen, so dass es intuitiver wäre, es zu verwenden. In meinem Fall, ich habe xml-Datei analysieren sieht wie folgt aus:Wrapping für Schleife in Python
<instance id="line-n.w8_047:15696:">
<answer instance="line-n.w8_047:15696:" senseid="product" />
<context> context1 </context>
</instance>
<instance id="line-n.w8_088:12441:">
<answer instance="line-n.w8_088:12441:" senseid="product" />
<context> another context</context>
</instance>
ich eine Klasse für Instance
wie folgt geschrieben:
class Instance:
def __init__(self, id, answer, context):
self.id = id
self.answer = answer
self.context = context
ich die nächste Funktion schrieb die Instanzen aufzuzählen:
import xml.etree.ElementTree as ET
def enum_instances(file_path, action):
for instance_xml in ET.parse(file_path).getroot().find('lexelt'):
action(Instance(
instance_xml.attrib['id'],
instance_xml.find('answer').attrib['senseid'],
instance_xml.find('context').text)
)
der action
Parameter ist ein Rückruf eine Aktion mit dem Instance
, wie dies zu tun:
enum_instances('/path/to/xml', lambda instance: print(instance.context))
aber es sieht ein wenig seltsam, ich möchte es noch intuitiver sein, wie folgt aus:
for instance in enum_instances(file_path):
print(instance.context)
was ist die beste Art und Weise, dass ‚iterable‘ Funktion zu implementieren? Dank
Warum also nicht tun genau das, was Sie wollen, dann? Rufen Sie nicht Aktion ... stattdessen ... 'erben 'die Instanz ... –
BTW, diese XML-Datei ist nicht XML. Es muss eine einzelne Wurzel geben. –
@ polkovnikov.ph Sie haben Recht, es gibt eine Wurzel und eine chaotische Struktur für mein XML, aber ich habe nur den relevanten Teil für die Frage –