python中的嵌套类

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


  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值