gpt4 book ai didi

python __setattr__ 的行为类似于 __getattr__

转载 作者:太空宇宙 更新时间:2023-11-03 17:13:12 25 4
gpt4 key购买 nike

我有一个包含字典的类,我使用 __getattr__(key)更好地访问 dictionary[key]现在我希望能够以相同的访问方式在字典中设置内容。

Class foo(object):
def __init__(self, name):
self.props = {"name":name}

def __getattr__(self, attribute):
return self.props[attribute]

这样我就可以通过这种方式访问​​它

f = foo("test")
print f.name

我也希望能够设置属性,但是使用 setattr 被证明是有问题的,因为它在其他任何操作失败之前被调用。有没有办法让它像 getattr 一样?

最佳答案

__setattr__ 没问题,但是您需要保护自己免受在设置 self.props 之前调用 __setattr__ 的情况(运行时错误:超出最大递归深度)

class foo(object):
# List of properties which are not stored in the props dict
__slots__ = ('props', 'other_property')

def __init__(self, name):
self.props = {"name":name}
self.other_property = 2

def __getattr__(self, attribute):
return self.props[attribute]

def __setattr__(self, name, value):
if name in self.__slots__:
super(foo, self).__setattr__(name, value)
else:
self.props[name] = value

f = foo("name")
print f.name
f.value = 2
f.name = "TEST"
print f.value
print f.props

关于python __setattr__ 的行为类似于 __getattr__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33895581/

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