关于第45讲属性访问最后一题的疑问
>>> class Counter:k = []
def __init__(self):
self.counter = 0
def __setattr__(self, name, value):
if name != 'counter':
if name not in self.k:
self.counter += 1 这段在触发setattr时没有造成死循环是因为有上面的if条件语句吗。
self.k.append(name)
super().__setattr__(name, value)
def __delattr__(self, name):
self.counter -= 1
self.k.remove(name)
super().__delattr__(name)
谢谢老师能解答我的疑惑。谢谢 对的,当 name 不等于 counter 的时候才会执行 if 语句的内容,
而 if 语句里会触发 __setattr__ 的只有 self.counter += 1,
这时 name 等于 counter,所以就不会继续执行 if 语句的内容,
而是往下执行了 super().__setattr__(name, value),
所以就不会造成无限递归 这是增量赋值,需要用增量赋值的魔法方法才会检测到 isdkz 发表于 2022-4-1 13:21
对的,当 name 不等于 counter 的时候才会执行 if 语句的内容,
而 if 语句里会触发 __setattr__ 的只有 ...
感谢老师的解答
页:
[1]