python-3.x - 如何只初始化一次类并保留python中的覆盖属性
问题描述
我正在对 XML 文件列表进行 XML 解析。我正在使用一个覆盖元素树的 XMLParser 类的模块。这是代码-
import sys
sys.modules['_elementtree'] = None
try:
sys.modules.pop('xml.etree.ElementTree')
except KeyError:
pass
import xml.etree.ElementTree as ET
class Parse():
def __init__(self):
self.xmlFiles = [list_of_xmlFile_paths]
def parse_xml_files(self):
for filepath in self.xmlFiles:
root = ET.parse(filepath, LineNumberingParser()).getroot()
for elem in root:
print(elem.start_line_numer, elem.end_line_number)
class LineNumberingParser(ET.XMLParser):
def _start(self, *args, **kwargs):
# Here we assume the default XML parser which is expat
# and copy its element position attributes into output Elements
self.element = super(self.__class__, self)._start(*args, **kwargs)
self.element.start_line_number = self.parser.CurrentLineNumber
self.element.start_column_number = self.parser.CurrentColumnNumber
return self.element
def _end(self, *args, **kwargs):
self.element = super(self.__class__, self)._end(*args, **kwargs)
self.element.end_line_number = self.parser.CurrentLineNumber
self.element.end_column_number = self.parser.CurrentColumnNumber
return self.element
LineNumberingParser 类为我提供了 xml 节点的开始行和结束行。我的问题是,对于每个 xml 文件,都会初始化类。所以这种重复初始化效率不高。我怎样才能通过只初始化一次类来做到这一点?任何人都可以请建议。
解决方案
我仍然不确定你想怎么做?似乎ET.XMLParser
需要在每个文件的基础上初始化类......
但是,如果您找到解决该问题的方法(例如,通过ET.XMLParser
手动“重新初始化”对象的变量),您可以将解析器的实例LineNumberingParser
作为类变量保留并只初始化一次。
推荐阅读
- docker - 无法从主机访问 pod 服务
- csvhelper - 获取记录
如果发生单个读取异常,则返回 null - CSVHelper 库 .NET - maven-3 - Bamboo 构建失败并出现内部服务器错误
- java - 在旧版应用程序中使用没有 Spring Boot 的 Netflix Ribbon
- node.js - Firebase 托管部署错误错误:错误:404,未找到请求的实体
- python - 如何从 HttpResponse 获取字符串或渲染到 Python/Django 中的字符串?
- python - 如何导入另一个 tkinter python 类代码以打开新的 tkinter 窗口?
- python - Python初学者:从数组数组中删除nan
- python - 基于键的字典过滤不起作用
- python - Boto3:TypeError:列表索引必须是整数或切片,而不是 str