美文网首页
python修饰器

python修饰器

作者: 陆寒晨 | 来源:发表于2019-12-21 21:18 被阅读0次

    1、参数args与kwargs:

    *args是元组,如def fun(args): pass 传过去的参数是元组形式fun(1,2,3),args=(1,2,3);
    *kwargs是字典型,如def fun(kwargs): pass 传过去的参数是元组形式fun(a=1,b=2,c=3),kwargs={"a":1,"b":2,"c":3};

    2、@property修饰器

    被修饰的方法,将可直接被当作类属性进行调用,使得python语言更加的简洁。

    class Dec:
        @property
        def value(self):
            return self.__value
    
        @value.setter
        def value(self, data):
            self.__value = data
    
    if __name__ == '__main__':
        dec = Dec()
        dec.value = 10
        print(dec.value)
    
    
    /Users/chenhanlu/PycharmProjects/PyLearning/venv/bin/python /Users/chenhanlu/PycharmProjects/PyLearning/logTest.py
    10
    
    Process finished with exit code 0
    

    【注意】所传的值必须是私有变量,即self.__value。

    3、@classmethod类方法修饰器

    类方法:python中的类方法指的是可以直接用类名(也可用实例名)进行调用的方法,相当与java中的static方法。

    class Dec:
    
    
        @property
        def value(self):
            return self.__value
    
        @value.setter
        def value(self, data):
            self.__value = data
    
        @classmethod
        def info(cls,data):
            print('我是一个类方法,参数是>>'+str(data))
    
    
    if __name__ == '__main__':
        dec = Dec()
        dec.value = 10
        print(dec.value)
        Dec.info(20)
    

    下面添加类方法的注解,python中的类方法,相当于Java中的static修饰的方法,输出结果为:

    /Users/chenhanlu/PycharmProjects/PyLearning/venv/bin/python /Users/chenhanlu/PycharmProjects/PyLearning/logTest.py
    10
    我是一个类方法,参数是>>20
    
    Process finished with exit code 0
    

    4、静态方法修饰器

    静态方法:不依赖于python类及类实例,放在类里边仅仅是为了管理方便,其实也可以放到类外边

    class Dec:
    
    
        @property
        def value(self):
            return self.__value
    
        @value.setter
        def value(self, data):
            self.__value = data
    
        @classmethod
        def info(cls,data):
            print('我是一个类方法,参数是>>'+str(data))
    
        @staticmethod
        def staticInfo(data):
            print('我是一个静态方法,参数是>>'+str(data))
    
    
    if __name__ == '__main__':
        dec = Dec()
        dec.value = 10
        print(dec.value)
        Dec.info(20)
        dec.info(30)
        dec.staticInfo(40)
        Dec.staticInfo(50)
    
    
    /Users/chenhanlu/PycharmProjects/PyLearning/venv/bin/python /Users/chenhanlu/PycharmProjects/PyLearning/logTest.py
    10
    我是一个类方法,参数是>>20
    我是一个类方法,参数是>>30
    我是一个静态方法,参数是>>40
    我是一个静态方法,参数是>>50
    
    Process finished with exit code 0
    

    5、各种方法的原则

    各种方法定义规则 :

    • 只访问成员变量的方法 ,定义成实例方法
    • 只访问类变量的方法 , 定义类方法
    • 既访问成员变量 , 也访问类变量的方法 , 定义成实例方法
    • 既不访问成员变量 , 也不访问类变量 ,定义成静态方法

    相关文章

      网友评论

          本文标题:python修饰器

          本文链接:https://www.haomeiwen.com/subject/imagnctx.html