Python中的descriptor

本文探讨了Python中的descriptor特性,解释了函数对象、descriptor的工作原理,包括__get__、__set__和__delete__方法。通过实例展示了如何使用descriptor作为装饰器,并在Django和Flask框架中找到类似的用法。文章提出的问题引导读者进一步思考descriptor的使用。
摘要由CSDN通过智能技术生成

1. 一切皆对象

    在python中不仅仅是类的实例是对象,包括类和函数也是对象。

2.函数对象

       可以看看下面的outer 返回的是什么

def outer():
    def inner():
        return 10
    return inner
func = outer()
print(func)

    可以看出,func为一个函数对象:<function outer.<locals>.inner at 0x0000021BAFB4C620>。

    并且这个函数对象是可以调用的。

def outer():
    def inner():
        return 10
    return inner
func = outer()
print(func())

    这个打印的结果为10。

    我在这里觉得函数的调用是分三步的,

  1. 定义一个函数func对象
  2. 发现一个func对象
  3. 调用这个func()对象

3.descriptor

    一个类中定义了__set__, __get__和__delete__中的一个或多个就是descriptor。

    __get__函数定义的时候需要的参数为三个,分别为self, instance, owner。

    __set__函数定义的时候需要的参数为三个,分别是self, instance, value。

    可以通过一个例子来看看这三个参数分别是什么。

class A:
    def __init__(self, val):
        self.val = val
    def __get__(self, instance, owner):
        print('self is ', self)
        print('instance is ', instance)
        print('owner is ', owner)
        return self.val

class B:
    a = A(10)

b = B()
print(b.a)

    打印的结果为:

self is  <__main__.A o
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值