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()
    杨河
  • 相关阅读:
    <html>
    poj 2676 Sudoku
    百亿互金平台救火故事
    Retrofit三步理解之中的一个 ------------------ Retrofit的简单使用总结
    精简版—愤慨的小鸟
    POJ 1095 Trees Made to Order
    Android Studio 错误: 非法字符: &#39;ufeff&#39; 解决方式|错误: 须要class, interface或enum
    使用CodePush实时更新 React Native 和 Cordova 应用
    获取url地址参数
    利用jQuery 通用文件导出前端实现,MVC文件导出
  • 原文地址:https://www.cnblogs.com/yang-he/p/11493747.html
Copyright © 2011-2022 走看看