7.12小节完成~
This commit is contained in:
@@ -29,3 +29,38 @@ f = sample()
|
|||||||
f()
|
f()
|
||||||
f.set_n(10)
|
f.set_n(10)
|
||||||
f()
|
f()
|
||||||
|
|
||||||
|
import sys
|
||||||
|
class ClosureInstance:
|
||||||
|
def __init__(self, locals=None):
|
||||||
|
if locals is None:
|
||||||
|
locals = sys._getframe(1).f_locals
|
||||||
|
|
||||||
|
# Update instance dictionary with callables
|
||||||
|
self.__dict__.update((key,value) for key, value in locals.items()
|
||||||
|
if callable(value) )
|
||||||
|
# Redirect special methods
|
||||||
|
def __len__(self):
|
||||||
|
return self.__dict__['__len__']()
|
||||||
|
|
||||||
|
# Example use
|
||||||
|
def Stack():
|
||||||
|
items = []
|
||||||
|
def push(item):
|
||||||
|
items.append(item)
|
||||||
|
|
||||||
|
def pop():
|
||||||
|
return items.pop()
|
||||||
|
|
||||||
|
def __len__():
|
||||||
|
return len(items)
|
||||||
|
|
||||||
|
return ClosureInstance()
|
||||||
|
|
||||||
|
s = Stack()
|
||||||
|
print(s)
|
||||||
|
s.push(10)
|
||||||
|
s.push(20)
|
||||||
|
print(len(s))
|
||||||
|
print(s.pop())
|
||||||
|
print(s.pop())
|
||||||
|
|||||||
Reference in New Issue
Block a user