码迷,mamicode.com
首页 > 其他好文 > 详细

描述符

时间:2019-08-18 15:36:40      阅读:57      评论:0      收藏:0      [点我收藏+]

标签:int   delete   没有   操作   实现   __init__   name   div   people   

# 描述符,相当于一个代理
class Str:
    def __init__(self,name):
        self.name = name
    # 取值操作时使用
    # instance:传入对象
    # owner:对象的类
    def __get__(self, instance, owner):
        print("get--->",instance,owner)
        # 返回对象的name属性
        return instance.__dict__[self.name]
    # 赋值操作时使用
    def __set__(self, instance, value):
        print("set-->",instance,value)
        # 设置属性
        instance.__dict__[self.name] = value
    # 删除操作时使用
    def __delete__(self, instance):
        print("delete——--》",instance)
        instance.__dict__.pop(self.name)
class People:
    name=Str(name)
    print(name)
    def __init__(self,name,age,salary):
        self.name=name
        print(self.name)
        self.age=age
        self.salary=salary

p1 = People(wangconng,21,-1000)

# 调用
print(p1.__dict__)
p1.name

# 赋值
print(p1.__dict__)
p1.name = cong
print(p1.__dict__)

#删除
print(p1.__dict__)
del p1.name
print(p1.__dict__)

# 描述符分为两种
# 数据描述符:至少实现了__set__(),__get__()
# 非数据描述符:没有实现__set__()
# 类操作属性>数据描述符
# 数据描述符 > 对象操作属性
# 对象描述符 > 非数据属性
# 非数据属性 > 找不到

 

描述符

标签:int   delete   没有   操作   实现   __init__   name   div   people   

原文地址:https://www.cnblogs.com/cong12586/p/11372332.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!