Python 面向对象反射及内置方法(部分)讲解

本文介绍了Python中反射和描述符的基本使用方法,包括hasattr、getattr、setattr、delattr等函数的应用,以及__getattr__、__get__等特殊方法的工作原理。通过实例展示了如何利用这些特性增强类的功能。

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

  1. 反射--自省
hasattr(obj, '属性')   obj.属性  是否存在
getattr(obj, '属性')   获取 obj.属性  不存在则报错
getattr(obj, '属性' , '默认值')   获取 obj.属性  不存在 返回 默认值
setattr(obj, '属性')  obj.属性 = 属性值
delattr(obj, '属性')  del obj.属性

    2.  内置方法- 属性的增删查

   # __getattr__, __setattr__, __delattr__            触发条件:obj点的 方式去操作属性时触发的方法

       
__getattr__: obj.属性 不存在时触发
__setattr__: 设置 obj.属性 时触发
__delattr__: del obj.属性 时触发

 

# __getitem__  ,  __setitem__ , __delitem__       触发条件:  obj[属性] 的方式去操作属性时触发的方法

__getitem__: obj[属性] 时触发
__setitem__: obj[属性] = 属性的值 时触发
__delitem__: del obj[属性] 时触发

 

3. 内置方法-描述符

# __get__ ,  __set__,  __delete__
# 描述就是一个新式类,这个类至少要实现上述三个方法的一个。
# 在其它类中生成本类的对象,本类成为代理,别类的对象调用本类的对象变量时触发上述方法。

示例:

class Foo:
    def __init__(self, name):
        self.name = name

    def __get__(self, instance, owner):
        print('get方法')

    def __set__(self, instance, value):
        print('set方法')

    def __delete__(self, instance):
        print('delete方法')


class Bar:
    x = Foo('name')

    def takepart(self):
        print(self.x)


b1 = Bar()
b1.x = 1   //触发Foo 中 __set__方法
print(b1.x)    //触发Foo 中 __get__方法

注意:在被描述的类中,类可以直接修改/获取 描述符,但不会触发 描述符方法     

# 优先级:类属性 -- 描述符属性 -- 示例属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Peter-XK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值