python descript_2020-12-10 Python Descriptor & Bound method

Descriptor描述器

python中的descriptor表示一类对象,如果定义了 __getters__(), __setters__(), __delete__()的任意一个对象则可称之为descriptor, 基本上就是实现了一个对象的储存系统

三种实现descriptor protocal的方式

1. 自定义Descriptor class

类似django Model -> Field的写法,Model的每个字段为一个Descriptor的实例化,Descriptor则为Field

class Descriptor(object):

def __init__(self, value=""):

self.value = value

# 注意这里的value只是实现了一个储存器

# 在获取和修改时对self(当前对象)的属性进行操作

def __get__(self, obj, objtype):

"""在此例中

self为实例化描述符的本身即Descriptor()

obj为描述符所属的对象, MyClass()——实例化的MyClass对象

objtype则时MyClass——对象的class

"""

return "{}for{}".format(self.value, self.value)

def __set__(self, obj, value):

if isinstance(value, str):

self.value = value

else:

raise TypeError("Name should be string")

class MyClass(object):

name = Descriptor()

notes = Descriptor()

>>> obj = MyClass()

>>> print(obj.name)

for

>>> obj.notes = "test"

>>> print(obj.notes)

testfortest

2. 使用property函数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值