gpt4 book ai didi

python - 我应该使用 `__setattr__` ,属性还是...?

转载 作者:太空狗 更新时间:2023-10-30 01:48:02 26 4
gpt4 key购买 nike

我有一个具有两个属性的对象,file_pathsave_path。除非显式设置 save_path,否则我希望它具有与 file_path 相同的值。

认为做到这一点的方法是使用__setattr__,如下所示:

class Class():
...
def __setattr__(self, name, value):
if name == 'file_path':
self.file_path = value
self.save_path = value if self.save_path == None else self.save_path
elif name == 'save_path':
self.save_path = value

但这看起来会给我无限循环,因为每当设置属性时都会调用 __setattr__。那么,编写上述内容并避免这种情况的正确方法是什么?

最佳答案

首先,最简单的方法是使用属性:

class Class(object):
def __init__(self, ...):
self._save_path = None
...
@property
def save_path(self):
if self._save_path is None:
return self.file_path
else:
return self._save_path
@save_path.setter
def save_path(self, val):
self._save_path = val

其次,如果你发现自己需要编写一个__setattr__,你应该在你的__setattr__中使用super(Class, self).__setattr__ > 绕过您的 __setattr__ 并以正常方式设置属性,避免无限递归。

关于python - 我应该使用 `__setattr__` ,属性还是...?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38574070/

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