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