<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
    主站蜘蛛池模板: 浮力影院第一页小视频国产在线观看免费 | 3344永久在线观看视频免费首页| 中文字幕免费在线观看动作大片| 午夜在线免费视频| 深夜a级毛片免费视频| 色妞www精品视频免费看| 美女羞羞免费视频网站| 色费女人18女人毛片免费视频| 羞羞视频免费观看| jizz在线免费播放| 中文字幕手机在线免费看电影| 99re8这里有精品热视频免费| 全黄大全大色全免费大片| 免费观看久久精彩视频| 午夜免费啪视频在线观看| 最近中文字幕mv免费高清视频8 | 亚洲aⅴ无码专区在线观看| 久久精品国产亚洲AV天海翼| 国产亚洲美女精品久久| 国产特黄一级一片免费| 免费在线中文日本| 波多野结衣免费在线观看| 大陆一级毛片免费视频观看| 又黄又爽无遮挡免费视频| 国产亚洲精品资在线| 亚洲免费视频网站| 亚洲宅男精品一区在线观看| 国产精品亚洲一区二区在线观看| 又长又大又粗又硬3p免费视频 | 亚洲AV无码专区在线亚| 国产亚洲一卡2卡3卡4卡新区 | 亚洲中文字幕久久久一区| 免费播放国产性色生活片| 国产在线观看免费视频软件| 最近高清中文字幕免费| 国产精品二区三区免费播放心 | 亚洲 综合 国产 欧洲 丝袜| 国产亚洲精品自在久久| 亚洲国产精品网站久久| 老司机午夜免费视频| 久别的草原电视剧免费观看|