我按照以下方式宣布了一个类
class A:
def __init__(self, list_1, list_2):
self.list1 = list_1
self.list2 = list_2
def __getattr__(self, item):
if item in self.list1: return "It is in list 1"
elif item in self.list2: return "It is in list 2"
else: return "It is in neither list 1 nor list 2"
Run Code Online (Sandbox Code Playgroud)
这里当我添加__setattr__ self.list1是递归的,因为__getattr__在每次之后调用self.list1并且这种递归是不可阻挡的.你能帮我解决一下吗?我需要这样实现.
谢谢
首先,这是一个完全奇怪的用法__getattr__,但我会假设你知道这一点.
基本上,问题是__setattr__每次你做这样的事情总是被调用self.foo = bar,所以如果你在__setattr__你内部使用它,你最终会得到你得到的递归.您需要做的是插入您尝试直接设置的值__dict__ self.__dict__['foo'] = bar.
如果你正在使用新的风格类(即A是它的后代object),那么你也可以做super(A, self).__setattr__(item, value)甚至只做object.__setattr__(self, item, value)
| 归档时间: |
|
| 查看次数: |
4769 次 |
| 最近记录: |