python中的嵌套類

來源:互聯網
上載者:User

在.NET和JAVA語言中看到過嵌套類的實現,作為外部類一個局部工具還是很有用的,今天在python也看到了很不錯支援一下。動態語言中很好的嵌套類的實現,應該說嵌套類解決設計問題同時簡化了程式,值得學習。

#!/usr/bin/env pythonimport threading, sysdef 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 _1def test(a, b):    for i in xrange(100000):        a = a+b    return aif __name__ == '__main__':    nested1 = nested1(2)    nested2 = nested1(test)    print nested2(2,3)    a =  nested2.child()    print a    

上面是一個借鑒web.py架構中的一個例子,下面print a部分是我的測試,發現函數對象不能引用內層的類,這裡的實現可以發現比獨立寫多個函數和類減少很多代碼

再看個例子:

#!/usr/bin/env pythonimport os, sysclass 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.nameif __name__ == '__main__':    child =  parent.child()    child.getName()

這裡從父類引用內部類,後面部分還可以這樣

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.