博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python-14-描述符应用和类的装饰器
阅读量:7084 次
发布时间:2019-06-28

本文共 1962 字,大约阅读时间需要 6 分钟。

上下文管理协议

class Feng_Open:    def __init__(self,name):        self.name = name    def __enter__(self):        print('执行enter')        return self    def __exit__(self, exc_type, exc_val, exc_tb):        print('执行exit')        #异常        print(exc_type,exc_val,exc_tb)        return Truewith Feng_Open('a.txt') as f:    print(f)    print(1/0)    print('+++++++++++++')    print('+++++++++++++')    print('+++++++++++++')print('ffffffffffffffffffff')复制代码

描述符应用

class Typed:    def __init__(self,key,expected_type):        self.key = key        self.expected_type = expected_type    def __get__(self, instance, owner):        print('get方法--%s--%s' %(instance,owner))        return instance.__dict__[self.key]    def __set__(self, instance, value):        print('set方法-%s---%s'%(instance,value))        if not isinstance(value,self.expected_type):            # print('你传入的类型不是字符串,请修改错误')            # return            raise TypeError('%s传入的类型不是%s'%(self.key,self.expected_type))        instance.__dict__[self.key]=value    def __delete__(self, instance):        print('delete')        instance.__dict__.pop(self.key)#name属性被数据描述符代理class People:    name = Typed('name',str)    age = Typed('age',int)    def __init__(self,name,age,salary):        self.name = name        self.age = age        self.salary = salaryp1 = People('fengfeng',18,100)#类属性>数据描述符>实例属性>费数据描述符>不存在p1.name = 'xiaorong'print(p1.name)print(p1.__dict__)del p1.nameprint(p1.__dict__)# xiaoming# {'name': 'xiaoming', 'age': 18, 'salary': 100}# delete# {'age': 18, 'salary': 100}复制代码

类的装饰器

# def method1(obj):#     print('------------')#     #进行操作#     obj.name='feng'#     return obj# # @method1# # def test():# #     print('test')# # test()# @method1# class Feng:#     pass# print(Feng.__dict__)def Typed(**kwargs):    def deco(obj):        for key,val in kwargs.items():            setattr(obj,key,val)        return obj    return deco@Typed(name='fengfeng')class Feng:    passprint(Feng.__dict__)复制代码

转载地址:http://rkmml.baihongyu.com/

你可能感兴趣的文章
系统性能优化一例
查看>>
去掉exitview自带焦点事件
查看>>
VMWare安装Ubuntu 12.04开启虚拟机的Unity Mode模式
查看>>
Material Design(原质化设计)视觉设计语言规范 踏得网镜像
查看>>
iOS开发小技巧--UIScrollView内部子控件添加约束的注意点
查看>>
js日期时间比较函数
查看>>
java 面试
查看>>
CentOS6.5 解压安装 二进制分发版 mysql-5.5.49-linux2.6-x86_64.tar.gz
查看>>
TortoiseGit中push的使用
查看>>
Spring与Quartz的整合实现定时任务调度[转]
查看>>
Flume中的HDFS Sink配置参数说明【转】
查看>>
鼠标键盘录制软件
查看>>
23种设计模式之单例模式(Singleton)
查看>>
Mahout应用
查看>>
李洪强iOS开发之静态库的打包一
查看>>
树莓派3b配置耳机音频输出
查看>>
ES6 Class
查看>>
jquery click()方法模拟点击事件对a标签不生效
查看>>
python -- lambda表达式
查看>>
JS垃圾回收——和其他语言一样,JavaScript 的 GC 策略也无法避免一个问题:GC 时,停止响应其他操作,这是为了安全考虑...
查看>>