zoukankan      html  css  js  c++  java
  • @修饰符

    def funA(a):
        print 'funA'
    
    def funB(b):
        print 'funB'
    
    @funA
    @funB
    def funC():
        print 'funC'
    
    result:
    
    >>> ================================ RESTART ================================
    >>>
    funB
    funA
    
    可以这样思考,return funA(funB(funC))
    实例:
    
    def now()
        print '2016-05-11'
    
    now()
    
    如果我想在now执行前执行另外一个方法,而不修改now方法呢?那么就用到了装饰器
    
    def log(func):
        # func 参数传递的值就是 now方法  
        def wrap(*args, **kw):
    
            # *args, **kw 方法接收任何形式的参数
    
            print '2016-05-10'
            return func(*args, **kw)  # 执行now方法
        return wrap
    
    
    @log
    def now():
        print '2016-05-11'
    
    
    now()  # 相当于执行 now = log(now),可以看到 func 就是 now的值,用装饰方法覆盖now
    
    问题来了,我想传递参数呢?
    
    def log(text):
        def decorator(func):
            def wrap(*args, **kw):
                print text
                return func(*args, **kw)
            return wrap
        return decorator
    
    
    @log('2016-05-10')
    def now():
        print '2016-05-11'
    
    
    now()  # 相当于执行 now = log('2016-05-10')(now)

    1.  @prototype修饰符的用法

    class Person(object):
    
        def __init__(self):
            
            self.__x = None
            
        def setx(self, value):
        
            self.__x = value
            
         def getx(self):
         
             return self.__x
             
         def delx(self):
         
             del self.__x
             
         x = property(getx, setx, delx)
    
    p = Person()
    
    p.x = 123  # 自动调用 setx 方法
    print p.x  # 自动调用 getx 方法
    
    del p.x    # 自动调用 delx 方法

    另外一种用法:

    class Person(object):
    
        def __init__(self):
            
            self.__x = None
            
        @prototype    
        def x(self):
            return self.__x
        
        @x.setter
        def x(self, value):
            self.__x = value
        
        @x.deleter
        def x(self):
            del self.__x
            
    p = Person()
    
    p.x = 123  # 自动调用 setx 方法
    print p.x  # 自动调用 getx 方法
    
    del p.x    # 自动调用 delx 方法

    2. staticmethod修饰符

    被staticmethod修饰符的表示这是一个类的静态方法,可以被类直接调用

    class Person(object):
        
        @staticmethod
        
        def hello():
            print 'hello world!!!'
    if __name__ == '__main__':
        Pserson.hello()
  • 相关阅读:
    C/C++通过WMI和系统API函数获取获取系统硬件配置信息
    C++ 获取mac地址
    解决Win7下UAC开启时无法响应WM_DROPFILES消息
    C++vector迭代器失效的问题
    解决Duilib创建的win32窗口拖到屏幕上边缘自动最大化
    VC++获取计算机Hardware Information (CPU ID, MainBoard Info, Hard Disk Serial, System Information)
    VC++实现在系统托盘来新消息闪烁,鼠标悬停显示窗口
    正则表达式的懒惰匹配?
    thinkphp-许愿墙-3
    thinkphp-许愿墙-2
  • 原文地址:https://www.cnblogs.com/ouyangping/p/8453003.html
Copyright © 2011-2022 走看看