python面向对象的1.构造及析构方法(魔术方法)2.描述符

# #2.python面向对象的构造及析构方法(魔术方法)
# #1.__call__可以把一个类的实例当作函数使用
# class printclass:
#     def __init__(self,name,age):
#         self.name=name
#         self.age=age    
#     def __call__(self,*arg):
# #*arg意为多个可变元组类型参数
#         print("{}'s age is {}".format(self.name,self.age))
#         return arg[0]+arg[1]
# p=printclass('王佳琪',"14")
# print(p(1,2))
# #2. __getitem__()指在已经实例化类的情况下,可以通过self(key)的类似函数调出对应的键值。
class person:
    def __init__(self,name,age): 
        
        self.registry={'name':name,"age":age}
    def __getitem__(self,key):
        if key not in self.registry.keys():
            raise Exception ('Please registry the key:{} first!'.format(key))
        return self.registry[key]
    def __setitem__(self,key,value):
        self.registry[key]=value  
p=person('王小军','15')
#print(p["nam"])#results:raise Exception ('Please registry the key:{} first!'.format(key))Exception: Please registry the key:nam first!
#print(p["name"])#results:王小军
#例中已知self.registry词典,通过__getitem__方法让p["nam"]不在self.registry里的报异常,反之则返回对应key的键值。
#3.__setitem__用于:一,新建键及其对应的键值;二,改变旧有键值    
# p['name']='王龙'
# print(p["nam"])                  #王龙
#二,改变旧有键值    
# p.__setitem__('nam','王龙')
# print(p['nam'])     #     王龙
#描述符__get__ __set__ __delete__
#定义:描述符是指带有绑定行为的对象属性,如果一个对象定义了上述三个方法之一,它就是描述符。
#1.1如果一个对象定义了__get__(),__set__()两个方法,那么这个对象被称为数据描述符。若有一个类的词典与之同名,则优先使用数据描述符,若这个对象只定义了一个__get__(),则称之为非数据描述符;
##如果一个实例的字典实现了无数据描述符的定义,那么这个字典中的属性会被优先使用。
#__get__()调用一个类的属性时触发
class meter:
    value=10
    def __get__(self,instance,owner):
        return self.value
    def __set__(self,instance,owner):
        self.value+=1
class instance:
    a=meter()
b=instance()
print(b.a)               #10 
#该函数的工作方式首先,它会访问自己的实例名称空间: a.__dict__['x']如果没有,则会访问类及超类的名称空间,
#__set__()为一个属性赋值时触发
b.a=2                    #11
print(b.a)

ava 大数据分析,爬虫,python,算法,diango,github等等学习资料,每堂课内容十足,绝非微信推广的十几分钟左右的一堂课,每个文件夹资料仅需5元,还有更多的实战项目,小程序等你来拿统统五元。

欲购请加:479952513 先看再买。备注:买资料。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值