gpt4 book ai didi

python getattr 和 setattr 与 self.__dict__

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

我一直在阅读关于重写 getattr 和 setattr 的内容,但我不知道如果我在构造函数中使用 self.__dict__ = self 是否需要重写赋值。

一旦我创建了类的实例

a = OPT(foo='bar')

a.foo 和 a['foo'] 使用和不使用 __getattr__ 和 __setattr__ 声明。

有人可以解释一下我是否需要两者。如果我这样做,为什么?谢谢!

class OPT(dict):
__getattr__ = dict.__getitem__
__setattr__ = dict.__setitem__

def __init__(self, *args, **kwargs):
super(OPT, self).__init__(*args, **kwargs)
self.__dict__ = self

最佳答案

如果您想在类用户获取或设置属性时做一些额外的事情,您可以覆盖 getattr 和 setattr。例如:

1) 您可能会避免在用户操作无效属性时引发异常,因此您只需为未知属性返回 None。

2) 属性操作实际上是转发/委托(delegate)的,因此事先不知道有效属性,例如表示数据库行的类,用户将列作为属性进行操作。我需要运行时检查给定的属性名称是否与列名称匹配,也许我想原谅大写/小写差异等。

另一件事,包含有时比子类化更受欢迎。您可以创建一个包含字典的类,而不是从字典继承。

关于python getattr 和 setattr 与 self.__dict__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22161876/

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