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

  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、付费专栏及课程。

余额充值