3防止setattr无限递归的方法

目录

1、用super()调用基类的setattr,因为本身在方法中写了setattr就是重写了这个方法,如果调用基类就会显得,比较正常。还有就是里面参数的问题。一个是接收 一个是值

2、我觉得 我可能只能看的懂用字典写的方法​编辑


1、用super()调用基类的setattr,因为本身在方法中写了setattr就是重写了这个方法,如果调用基类就会显得,比较正常。还有就是里面参数的问题。一个是接收 一个是值

class Counter:
    def __init__(self):
        super().__setattr__('counter',0)
    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)
c = Counter()
c.x = 1
print(c.counter)
c.y= 1
print(c.counter)
c.z = 1
del c.x
print(c.counter)

2、我觉得 我可能只能看的懂用字典写的方法

class Counter:
    def __init__(self):
        self.__dict__['counter']=0
    def __setattr__(self, name, value):
        self.__dict__[name] = value
        self.__dict__['counter'] += 1
    def __delattr__(self, name):
        self.__dict__[name]
        self.__dict__['counter'] -=1
c = Counter()
c.x=1
print(c.counter)
c.y = 1
print(c.counter)
c.z =1
print(c.counter)
del c.x
print(c.counter)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值