|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
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)
这里在初始化的方法里,self.counter触发setattr操作,那么这里触发的是系统的赋值,也就是self.counter被赋值为0,还是已经重写的setattr方法
如果是第一种情况,那么接下来 self.counter += 1,但是小甲鱼说 “这时候 self.counter 还没有定义,所以没法 += 1” ,这就说不通了呀
第二种情况,直接触发重写的setattr,那么出错也就理所应当了
class Counter:
def __init__(self):
print(1)
self.counter = 0
print(2)
def __setattr__(self, name, value):
print(3)
self.counter += 1
super().__setattr__(name, value)
def __delattr__(self, name):
self.counter -= 1
super().__delattr__(name)
c=Counter()
加两条print语句 就清晰了
|
|