<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Skynet

    ---------- ---------- 我的新 blog : liukaiyi.cublog.cn ---------- ----------

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      112 Posts :: 1 Stories :: 49 Comments :: 0 Trackbacks


    代碼可以直接運行,看結果
    如果命令調試 python -m pdb pyaop.py
    (Pdb)b pyaop:10
    (Pdb)c
    (Pdb)n .....自己來把
    調試參考 : python pdb 基礎調試


    源文件 : pyaop.py
    #!/usr/bin/python
    #
     -*- coding: utf8 -*-
    #
     參考:http://www.cnblogs.com/Alexander-Lee/archive/2008/12/06/pythonaop.html

    """
    py aop 代理類 ( metaclass 特性 )
       由于使用 __metaclass__ = <type 'type'>
       pyaop 繼承 type
    """
    class pyaop(type):
        
    # before ; after 方法變量引用聲明
        beforeop=lambda e :  None
        afterop
    =lambda e :  None

        
    #class方法(靜態方法)set
        @classmethod
        
    def setbefore(self,func):
            pyaop.beforeop
    =func
        @classmethod
        
    def setafter(self,func):
            pyaop.afterop
    =func
     
     
       
    """ 使用調試 
       # python -m pdb pyaop.py 
       # 由下面 A類 < __metaclass__ = pyaop > 
       #        類初始 的 __new__ 指向 pyaop __new__ 
       # 
       # (Pdb)b pyaop:36   (大概就是下面函數form types  的行號)
       # (Pdb)a   (可以看看調試中,各參數的值,注意dict為A的初始對象傳過來了)
       #     mcl = <class '__main__.pyaop'>
       #     name = A
       #     bases = (<type 'object'>,)
       #     dict = {'__module__': '__main__', 'foo': <function foo at 0x7fddced4>, '__metaclass__': <class '__main__.pyaop'>, 'foo2': <function foo2 at 0x7fddcf0c>}
       # 本函數目的: 使用 新的另個對象掛載 被aop后的 A對象 方法
       
    """
        
    def __new__(mcl,name,bases,dict):
            
    from types import FunctionType 
            obj
    =object()

            
    def aop(func):
                
    def wrapper(*args, **kwds):
                    pyaop.beforeop(obj) 
                    value 
    = func(*args, **kwds)
                    pyaop.afterop(obj)
                    
    return value
                
    return wrapper
            
            
    #添加代理
            for attr, value in dict.iteritems():
                
    if isinstance(value, FunctionType):
                    dict[attr] 
    = aop(value) 
        
    #掛載到 obj 上 
            obj=super(pyaop, mcl).__new__(mcl, name, bases, dict) 
            
    return obj
       

    class A(object):
        
    #被 aop 代理 聲明!
        __metaclass__ = pyaop
        
    def foo(self):
            total 
    = 0
            
    for i in range(100000):
                total 
    = total+1
            
    print total

        
    def foo2(self):
            
    from time import sleep
            total 
    = 0
            
    for i in range(100000):
                total 
    = total+1
                
    #sleep(0.0001)
            print total


    """#####################################################################################
    #   測試 
    #####################################################################################
    """

    def beforep(self):
        
    print('before')
    def afterp(self):
        
    print('after')

    if __name__ == "__main__":
        pyaop.setbefore(beforep)
        pyaop.setafter(afterp)
        a
    =A()
        a.foo()
        a.foo2()


    其他aop:
    使用 @
    def addspam(fn):
        
    def new(*args):
            
    print "spam, spam, spam"
        
    return fn(*args)
    return new


    @addspam
    def useful(a, b):
        
    print a**2 + b**2


    useful(
    3,4)
    #結果
    #
    spam, spam, spam
    #
    25

    晚綁定!
    def attrs(**kwds):
        
    def decorate(f):
            
    for k in kwds:
                setattr(f, k, kwds[k])
            
    return f
        
    return decorate

    @attrs(versionadded
    ="2.2",author="Guido van Rossum")
    def mymethod(f):
        
    return mymethod

    x
    =mymethod(1)
    x.versionadded
    #2.2 !這是什么好東西!!





    整理 m.tkk7.com/Good-Game
    posted on 2009-04-08 15:18 劉凱毅 閱讀(1254) 評論(0)  編輯  收藏 所屬分類: python
    主站蜘蛛池模板: 亚洲综合自拍成人| 久久久久亚洲AV无码专区桃色| 亚洲人成色7777在线观看| 特级毛片aaaa免费观看| 国产成人精品免费视频大全五级| 2019亚洲午夜无码天堂| 无码少妇一区二区浪潮免费| 亚洲黄色网址大全| 中国xxxxx高清免费看视频| 亚洲首页在线观看| 思思re热免费精品视频66| 亚洲精品第一国产综合野| 免费观看一级毛片| 免费观看又污又黄在线观看| 亚洲成人影院在线观看| 四虎国产精品成人免费久久| 国产亚洲精品无码专区| 久久香蕉国产线看免费| 亚洲人成电影青青在线播放| 国产精品视频永久免费播放| 亚洲一区二区三区写真| 亚洲Av无码乱码在线znlu| 成av免费大片黄在线观看| 亚洲理论片在线观看| 午夜国产精品免费观看 | 亚洲免费电影网站| 成人超污免费网站在线看| 无码一区二区三区亚洲人妻| 亚洲伊人色欲综合网| 91热成人精品国产免费| 亚洲成av人片在www鸭子| 毛茸茸bbw亚洲人| 亚洲毛片免费视频| 精品特级一级毛片免费观看| 亚洲色无码专区在线观看| 99在线观看精品免费99| 亚洲1区2区3区精华液| 亚洲AV无码专区国产乱码4SE| 97视频免费在线| 曰韩无码AV片免费播放不卡| 亚洲av日韩av激情亚洲|