45课课后题
class Counter:def __init__(self):
self.counter = 0 # 这里会触发 __setattr__ 调用
def __setattr__(self, name, value):
self.counter += 1
“““既然需要 __setattr__ 调用后才能真正设置 self.counter 的值,所以这时候 self.counter 还没有定义,所以没法 += 1,错误的根源。”””
super().__setattr__(name, value)
def __delattr__(self, name):
self.counter -= 1
super().__delattr__(name)
如果在__new__里定义count会不会出错呢? 会。 永恒的蓝色梦想 发表于 2020-7-15 12:00
会。
那就是说在__setattr__里不能进行运算操作了吗?还是说有其他的方法呢 超级大的甲鱼 发表于 2020-7-15 12:02
那就是说在__setattr__里不能进行运算操作了吗?还是说有其他的方法呢
class Counter:
def __init__(self):
super().__setattr__("counter", 0) # 这里不会触发 __setattr__ 调用
def __setattr__(self, name, value):
self.counter += 1
super().__setattr__(name, value)
def __delattr__(self, name):
self.counter -= 1
super().__delattr__(name) 永恒的蓝色梦想 发表于 2020-7-15 12:06
腻害 永恒的蓝色梦想 发表于 2020-7-15 12:06
但是这个会出无限递归吧,在__setattr__里面直接self.counter += 1 超级大的甲鱼 发表于 2020-7-15 12:49
但是这个会出无限递归吧,在__setattr__里面直接self.counter += 1
super() 之后调用的是 object 的 __setattr__ 啦 永恒的蓝色梦想 发表于 2020-7-15 13:40
super() 之后调用的是 object 的 __setattr__ 啦
def __setattr__(self, name, value):
self.counter += 1
这里对counter进行修改不就无限递归了吗,每进行一次self。counter+= 1 都会再次调用Counter.__setattr__() 超级大的甲鱼 发表于 2020-7-15 14:12
def __setattr__(self, name, value):
self.counter += 1
这里对counter进行修改不就 ...
你说的是这个啊,确实会无限递归。当时没发现{:10_277:}
改成:class Counter:
def __init__(self):
super().__setattr__("counter", 0) # 这里不会触发 __setattr__ 调用
def __setattr__(self, name, value):
super().__setattr__("counter", self.counter + 1)
super().__setattr__(name, value)
def __delattr__(self, name):
super().__setattr__("counter", self.counter - 1)
super().__delattr__(name)
页:
[1]