gpt4 book ai didi

python - 我可以部分覆盖 __setattr__ 吗?

转载 作者:太空狗 更新时间:2023-10-30 02:21:45 24 4
gpt4 key购买 nike

我正在模仿 ConfigParser 模块的行为来编写一个高度特化的解析器,它利用我使用的特定应用程序的配置文件中的一些定义明确的结构。这些文件遵循标准的 INI 结构:

[SectionA]
key1=value1
key2=value2

[SectionB]
key3=value3
key4=value4

对于我的申请,这些部分在很大程度上是无关紧要的;不同部分的 key 之间没有重叠,所有用户只记住 key 名称,而不会记住他们应该进入的部分。因此,我想覆盖 __getattr____setattr__ 在我创建的 MyParser 类中允许这样的快捷方式:

config = MyParser('myfile.cfg')
config.key2 = 'foo'

__setattr__ 方法将首先尝试找到一个名为 key2 的部分,如果存在则将其设置为“foo”。假设没有这样的部分,它将在每个部分内部查找名为 key2 的键。如果 key 存在,则将其设置为新值。如果它不存在,解析器最终会引发一个 AttributeError

我已经为此构建了一个测试实现,但问题是我还想要一些不受此行为影响的直接属性。我希望 config.filename 是一个包含原始文件名称的简单字符串,而 config.content 是包含每个部分的字典的字典。

有没有一种干净的方法可以在构造函数中设置 filenamecontent 属性,从而避免它们被我的自定义 getter 和 setter 忽略?在调用自定义 __setattr__ 之前,python 会在对象的 __dict__ 中查找属性吗?

最佳答案

文件名内容传给父类(super class)处理

class MyParser(object):
def __setattr__(self, k, v):
if k in ['filename', 'content']:
super(MyParser, self).__setattr__(k, v)
else:
# mydict.update(mynewattr) # dict handles other attrs

关于python - 我可以部分覆盖 __setattr__ 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14264156/

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