zoukankan      html  css  js  c++  java
  • 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()
    杨河
  • 相关阅读:
    成年人的快乐
    90后家庭的宠物
    计算机科学与技术易错知识点需记篇
    微机原理与接口编程技术2020 考试大纲知识点超细总结
    84.手写一个类的继承
    83.对前端路由的理解?前后端路由的区别
    81.$(document).ready()方法和window.onload有什么区别?
    80.浏览器是如何渲染页面的
    77、常用的拖拽事件
    75.json和jsonp的区别?
  • 原文地址:https://www.cnblogs.com/yang-he/p/11493747.html
Copyright © 2011-2022 走看看