我正在模仿ConfigParser
模块的行为来编写一个高度专业化的解析器,该解析器利用我使用的特定应用程序的配置文件中的一些明确定义的结构。这些文件遵循标准 INI 结构:
[SectionA]
key1=value1
key2=value2
[SectionB]
key3=value3
key4=value4
对于我的应用程序,这些部分在很大程度上是无关紧要的;不同部分的键之间没有重叠,所有用户只记得键名,而不是他们应该进入的部分。因此,我想覆盖__getattr__
并__setattr__
在MyParser
我创建的类中允许快捷方式像这样:
config = MyParser('myfile.cfg')
config.key2 = 'foo'
该__setattr__
方法将首先尝试找到一个名为的部分key2
并将其设置为“foo”(如果存在)。假设没有这样的部分,它会在每个部分内部查找一个名为key2
. 如果键存在,则将其设置为新值。如果它不存在,解析器最终会引发一个AttributeError
.
我已经为此构建了一个测试实现,但问题是我还希望有几个直接属性可以免除这种行为。我想config.filename
成为一个包含原始文件名称的简单字符串,并config.content
成为包含每个部分的字典的字典。
是否有一种干净的方法可以在构造函数中设置filename
andcontent
属性,以免它们被我的自定义 getter 和 setter 忽略?__dict__
在调用 custom 之前,python 会在对象中查找属性__setattr__
吗?