gpt4 book ai didi

python - 控制 python 类的 getter 和 setter

转载 作者:太空狗 更新时间:2023-10-30 00:42:13 26 4
gpt4 key购买 nike

考虑以下类:

class Token:
def __init__(self):
self.d_dict = {}

def __setattr__(self, s_name, value):
self.d_dict[s_name] = value

def __getattr__(self, s_name):
if s_name in self.d_dict.keys():
return self.d_dict[s_name]
else:
raise AttributeError('No attribute {0} found !'.format(s_name))

在我的代码中,Token 有一些其他函数(比如 get_all() 返回 d_dict,has(s_name) 告诉我我的 token 是否有特定属性)。

无论如何,我认为它们是我计划中的一个缺陷,因为它不起作用:当我创建一个新实例时,python 尝试调用 __setattr__('d_dict', '{}') .

我怎样才能实现类似的行为(也许以更 pythonic 的方式?)而不必编写像 Token.set(name, value) 和 get(name) 这样的东西来设置或获取 token 的属性.

欢迎批评设计缺陷和/或愚蠢 :)

谢谢!

最佳答案

你需要特例 d_dict。

尽管当然,在上面的代码中,您所做的只是复制任何对象已经使用 __dict__ 所做的事情,所以这是毫无意义的。如果您打算对某些属性进行特殊处理并实际为这些属性使用方法,我猜对了吗?

在这种情况下,您可以使用属性。

class C(object):
def __init__(self):
self._x = None

@property
def x(self):
"""I'm the 'x' property."""
return self._x

@x.setter
def x(self, value):
self._x = value

@x.deleter
def x(self):
del self._x

关于python - 控制 python 类的 getter 和 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1241703/

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