Python闭包的奇技淫巧

这种奇技淫巧,很怪异。相比一个真正的类,像继承,属性,描述符,或者类方法这样的特性在这种方法中是无法使用的。
从全局的角度考虑, 为闭包增加方法可能会有更多的实际用途,比如我们想重置内部状态,刷新缓冲区,清除缓存或者实现某种形式的反馈机制。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# coding:utf-8
import sys
class ClosureInstance:
def __init__(self, locals=None):
if locals is None:
# 获得上一层
locals = sys._getframe(1).f_locals
# 遇到可调用的(函数),更新实例的字典。
self.__dict__.update((key, value) for key, value in locals.items()
if callable(value))
print self.__dict__
# 重定向len方法
def __len__(self):
!['__len__'](./Python闭包的奇技淫巧)
def Stack():
items = []
def push(item):
items.append(item)
def pop():
return items.pop()
def __len__():
return len(items)
return ClosureInstance()
if __name__ == '__main__':
s = Stack()
print(s)
s.push(10)
s.push(20)
s.push('Hello')
print(len(s))
print(s.pop())
print(s.pop())
print(s.pop()

文章目录
|