gpt4 book ai didi

未调用 Python 父类(super class) __init__ 方法

转载 作者:太空宇宙 更新时间:2023-11-04 05:07:42 24 4
gpt4 key购买 nike

当我在 Python 3.6 中运行以下程序时:

import xml.etree.ElementTree

def startElementHandler(name, attributes):
print("Name:", name)

class Parser(xml.etree.ElementTree.XMLParser):
def __init__(self, html=0, target=None, encoding=None):
super(Parser, self).__init__(html, target, encoding)
self.parser.StartElementHandler = startElementHandler

if __name__ == "__main__":
parser = Parser()
print("Success")

我得到以下堆栈跟踪:

Traceback (most recent call last):
File "D:\src\python\base_init\base_init.py", line 12, in <module>
parser = Parser()
File "D:\src\python\base_init\base_init.py", line 9, in __init__
self.parser.StartElementHandler = startElementHandler
AttributeError: 'Parser' object has no attribute 'parser'

XMLParser class source code可以看出我使用正确的参数调用它的 __init__() 方法,并且在其中设置了 XMLParserparser 属性。

发生的事情是 XMLParser.__init__() 方法没有被调用。我究竟做错了什么?这一定很愚蠢,但我就是看不出来。

最佳答案

C 加速器 that's imported XMLParser 没有设置 parser 属性。一个有点可行的选择是通过在 sys.modules 中将它的值设置为 None 来禁用它的导入:

import sys
sys.modules['_elementtree'] = None

当然,为了使其正常工作,需要在 任何 ElementTree 导入发生之前完成,显然,您会受到性能影响。

至于为什么这是,我猜 parser 属性被认为是 XMLParser 的私有(private) API 的一部分,没有文档它存在(而且看起来不像是遗漏)。因此,不应依赖它。

关于未调用 Python 父类(super class) __init__ 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43942576/

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