python中的嵌套類


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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM