python中的嵌套类

发布时间:2019-09-07 08:03:53编辑:auto阅读(1400)

    在.NET和JAVA语言中看到过嵌套类的实现,作为外部类一个局部工具还是很有用的,今天在python也看到了很不错支持一下。动态语言中很好的嵌套类的实现,应该说嵌套类解决设计问题同时简化了程序,值得学习。

    #!/usr/bin/env python
    
    import threading, sys
    
    def nested1(timeout):
        def _1(function):
            def _2(*args,**kw):
                class child(threading.Thread):
                    def __init__(self):
                        threading.Thread.__init__(self)
                        self.result=None
                        self.error = None
                        
                        self.setDaemon(True)
                        self.start()
    
                    def run(self):
                        try:
                            self.result = function(*args, **kw)
                        except:
                            self.error = sys.exc_info()
    
                c = child()
                c.join(timeout)
                if c.isAlive():
                    raise TimeoutError, 'took too long'
                if c.error:
                    raise c.error[0], c.error[1]
                return c.result
            return _2
        return _1
    def test(a, b):
        for i in xrange(100000):
            a = a+b
        return a
    
    
    if __name__ == '__main__':
        nested1 = nested1(2)
        nested2 = nested1(test)
        print nested2(2,3)
    
        a =  nested2.child()
        print a
        
    
    上面是一个借鉴web.py框架中的一个例子,下面print a部分是我的测试,发现函数对象不能引用内层的类,这里的实现可以发现比独立写多个函数和类减少很多代码

    再看个例子:

    #!/usr/bin/env python
    
    import os, sys
    
    class parent:
        def __init__(self):
            self.name = 'parent'
    
        def getName(self):
            print self.name
    
        class child:
            def __init__(self):
                self.name = 'child'
    
            def getName(self):
                print self.name
    
    
    if __name__ == '__main__':
        child =  parent.child()
        child.getName()

    这里从父类引用内部类,后面部分还可以这样

    if __name__ == '__main__':
        p = parent()
        p.getName()
        c =  p.child()
        c.getName()


关键字