摘要: # 通过描述符自定制@property的功能 # 原始通过@property实现的功能:将类中定义的函数属性,通过装饰器@property将其封闭成数据属性 class Room: def __init__(self, name, width, length): self.name = name self.width = width s... 阅读全文
posted @ 2018-08-13 23:49 四十不惑的编程之路 阅读(144) 评论(0) 推荐(0) 编辑
摘要: # 类的装饰器 # 对不同的类使用装饰器加上不同的类属性 def typed(**kwargs): def deco(obj): for k, v in kwargs.items(): setattr(obj, k, v) return obj return deco @typed(x=1, y=2, z=3) # ... 阅读全文
posted @ 2018-08-13 22:48 四十不惑的编程之路 阅读(1248) 评论(0) 推荐(0) 编辑
摘要: # __enter__和__exit__上下文管理协议 f = open('test.txt', 'r', encoding='utf-8') f.read() f.close() # 等同于下面的with...as...写法,实际上就是实现了上下文管理协议,无需再关闭f对象 with open('test.txt', 'r', encoding='utf-8') as f: f.re... 阅读全文
posted @ 2018-08-13 21:39 四十不惑的编程之路 阅读(113) 评论(0) 推荐(0) 编辑
摘要: # 描述符 __get__ __set__ delete__ # 描述符本质就是一个新式类,在这个新式类中,至少实现了__get__(),__set__(),__delete()中的一个,这也称为描述符协议 # __get__() 调用一个属性时触发 # __set__() 为一个属性赋值时触发 # __delete__() 使用del删除属性时触发 # 描述符的作用是用来代理另外一个类的属性(... 阅读全文
posted @ 2018-08-13 21:18 四十不惑的编程之路 阅读(182) 评论(0) 推荐(0) 编辑
摘要: # __next__和__iter__实现迭代器协议 class Foo: def __init__(self, n): # 初始化 self.n = n def __iter__(self): # 定义类的__iter__方法,实例化时就为一个可迭代对象 return self def __next__(self): # 定义类的_... 阅读全文
posted @ 2018-08-13 21:17 四十不惑的编程之路 阅读(495) 评论(0) 推荐(0) 编辑
摘要: # __slots__ __doc__ __module__ __class__ __del__ __call__ # __slots__ 定义在类中的类属性,如果你有一个属性很少的类,但是有很多实例,为了节省内存可以使用__slots__ # 在类当中定义了__slots__,实例就没有自己的属性字典__dict__只能使用__slots__提供的属性且不能新增其它属性 # 实例查看属性时不... 阅读全文
posted @ 2018-08-13 20:01 四十不惑的编程之路 阅读(119) 评论(0) 推荐(0) 编辑
摘要: # __str__ __repr__ 与 __format__ class Foo: def __init__(self, year, month, day): self.year = year self.month = month self.day = day def __str__(self): return ... 阅读全文
posted @ 2018-08-13 20:00 四十不惑的编程之路 阅读(163) 评论(0) 推荐(0) 编辑
摘要: # __getitem__ __setitem__ __delitem__ # 只适用于类似操作字典的操作才会触发 class Foo: def __getitem__(self, item): print('调用了__getitem__') return self.__dict__[item] def __setitem__(self, key... 阅读全文
posted @ 2018-08-13 20:00 四十不惑的编程之路 阅读(143) 评论(0) 推荐(0) 编辑
摘要: # isinstance issubclass 与系统内置属性 __getattribute__ # isinstance(obj, cls)检查obj是否是类cls的实例 class Foo: pass obj = Foo() print(isinstance(obj, Foo)) # True 判断obj是否是Foo类的实例 mystr = 'hello world' pr... 阅读全文
posted @ 2018-08-13 00:20 四十不惑的编程之路 阅读(133) 评论(0) 推荐(0) 编辑