Python学习笔记(二十四)——小甲鱼第四十五讲

本文深入探讨了Python中特殊方法如__getattr__、__setattr__和__delattr__的使用及其实现细节,通过实例展示了如何利用这些方法进行属性管理,避免无限递归,并实现属性计数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0、该写法错误,因为每当属性被赋值的时候,__setattr__()就会被调用,而里边的self.name=value+1语句又会再次调用__setattr__(),导致无限递归

 

1、__getattribute__(self,name)

 

2、位置1显示3

位置2显示2和None

 

3、

2

1

AttributeError

 

4、赋值时会调用__setattr__(),而__setattr__()重写中用到还未定义的属性值

 

 

0、

class demo:

 

    def __getattr__(self,name):

        return '该属性不存在'

 

>>> demo1 = demo()

>>> demo1.x

'该属性不存在'

>>>

 

1、

class demo:

    def __getattr__(self,name):

        self.name = 'FishC'

        return self.name

 

>>> demo1 = demo()

>>> demo1.x

'FishC'

>>> demo.x = 'X-man'

>>> demo.x

'X-man'

>>>

 

 

2、

class Counter:#想办法取消赋值操作

   

    def __init__(self):

        super().__setattr__('count',0)

    def __setattr__(self,name,value):

        super().__setattr__('count',self.count + 1)

        super().__setattr__(name,value)

    def __delattr__(self,name):

        super().__setattr__('count',self.count - 1)

        super().__delattr__(name)

 

       

>>> c=Counter()

>>> c.x=1

>>> c.count

1

>>> c.y=1

>>> c.z=1

>>> c.count

3

>>> del c.x

>>> c.count

2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值