gpt4 book ai didi

Python 类装饰器将元素访问转换为属性访问

转载 作者:太空宇宙 更新时间:2023-11-04 10:56:55 25 4
gpt4 key购买 nike

我正在为 Python 类寻找一个装饰器,它将任何元素访问转换为属性访问,如下所示:

@DictAccess
class foo(bar):
x = 1
y = 2

myfoo = foo()
print myfoo.x # gives 1
print myfoo['y'] # gives 2
myfoo['z'] = 3
print myfoo.z # gives 3

这样的装饰器是否已经存在于某处?如果没有,实现它的正确方法是什么?我应该将 __new__ 包装在类 foo 上并向实例添加 __getitem____setitem__ 属性吗?那么如何使这些正确地绑定(bind)到新类呢?我知道 DictMixin 可以帮助我支持所有 dict 功能,但我仍然必须以某种方式获取类中的基本方法。

最佳答案

装饰器需要添加一个__getitem__方法和一个__setitem__方法:

def DictAccess(kls):
kls.__getitem__ = lambda self, attr: getattr(self, attr)
kls.__setitem__ = lambda self, attr, value: setattr(self, attr, value)
return kls

这将适用于您的示例代码:

class bar:
pass

@DictAccess
class foo(bar):
x = 1
y = 2

myfoo = foo()
print myfoo.x # gives 1
print myfoo['y'] # gives 2
myfoo['z'] = 3
print myfoo.z # gives 3

该测试代码产生预期值:

1
2
3

关于Python 类装饰器将元素访问转换为属性访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9106076/

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