python中的嵌套類
在.NET和JAVA語言中看到過嵌套類的實現,作為外部類一個局部工具還是很有用的,今天在python也看到了很不錯支持一下。動態語言中很好的嵌套類的實現,應該說嵌套類解決設計問題同時簡化了程序,值得學習。
1 import threading, sys 2 3 def nested1(timeout): 4 def _1(function): 5 def _2(*args,**kw): 6 class child(threading.Thread): 7 def __init__(self): 8 threading.Thread.__init__(self) 9 self.result=None 10 self.error = None 11 12 self.setDaemon(True) 13 self.start() 14 15 def run(self): 16 try: 17 self.result = function(*args, **kw) 18 except: 19 self.error = sys.exc_info() 20 21 c = child() 22 c.join(timeout) 23 if c.isAlive(): 24 raise TimeoutError, 'took too long' 25 if c.error: 26 raise c.error[0], c.error[1] 27 return c.result 28 return _2 29 return _1 30 def test(a, b): 31 for i in xrange(100000): 32 a = a+b 33 return a 34 35 36 if __name__ == '__main__': 37 nested1 = nested1(2) 38 nested2 = nested1(test) 39 print nested2(2,3) 40 41 a = nested2.child() 42 print a
上面是一個借鑒web.py框架中的一個例子,下面print a部分是我的測試,發現函數對象不能引用內層的類,這里的實現可以發現比獨立寫多個函數和類減少很多代碼
再看個例子:
1 import os, sys 2 3 class parent: 4 def __init__(self): 5 self.name = 'parent' 6 7 def getName(self): 8 print self.name 9 10 class child: 11 def __init__(self): 12 self.name = 'child' 13 14 def getName(self): 15 print self.name 16 17 18 if __name__ == '__main__': 19 child = parent.child() 20 child.getName()
這里從父類引用內部類,后面部分還可以這樣
1 if __name__ == '__main__': 2 p = parent() 3 p.getName() 4 c = p.child() 5 c.getName()
