ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python内置装饰器---- staticmethod和classmethod

2020-12-23 14:33:54  阅读:221  来源: 互联网

标签:get python argv1 ---- classmethod staticmethod self def


staticmethod

staticmethod 只能作为函数装饰器应用。其作用为将一个函数转换为静态方法。下面一段代码中,若不在def get(argv1)上添加装饰器staticmethod.
在执行代码test.get("hello") 将会出现 TypeError: get() takes 1 positional argument but 2 were given。
这说明 在不添加装饰器staticmethod,Python 解释器仅仅将def get(argv1) 解释为类C 内部定义的函数;添加后,则将其解释为类C 的静态方法。

class C:
    def __init__(self):
        self._item = 1
    
    @staticmethod
    def get(argv1):
        # print(self._item)
        print(argv1)

test = C()
test.get('hello')
C.get('hello')

classmethod

classmethod,与staticmethod类似, 只能作为函数装饰器应用。其作用为将一个函数转换为类方法。若不在def get(argv1)上添加装饰器classmethod.
在执行代码时 C.get('hello')将会出现 TypeError: get() missing 1 required positional argument: 'argv1' 。
这说明 在不添加装饰器classmethod,Python 解释器不会讲C作为cls 传输给 get(cls,argv) 。

class C:
    def __init__(self):
        self._item = 1
   
    @classmethod
    def get(cls, argv1):
        # print(self._item)
        print(argv1)
test = C()
test.get('hello')
C.get('hello')

小结

staticmethod classmethod
区别 讲func 装换为静态方法 将func 转换为类方法
相似点 调用方式相同

标签:get,python,argv1,----,classmethod,staticmethod,self,def
来源: https://www.cnblogs.com/Finding-bugs/p/14178436.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有