前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >53 - @classmethod 和@staticmethod 的用法和区别

53 - @classmethod 和@staticmethod 的用法和区别

原创
作者头像
ruochen
修改2021-06-07 10:26:52
7850
修改2021-06-07 10:26:52
举报

请解释@classmethod 和@staticmethod 的用法和区别

  • 共同点
    • 都是用来声明静态方法的 类名.方法名
  • 区别
    • @staticmethod 不需要表示自身对象的self和自身类的cls参数,就像普通函数一样定义
    • @classmethod 也不需要self参数,但第二个参数需要是表示自身的cls参数,避免硬编码
代码语言:txt
复制
class MyClass:
    bar = 1 # 静态变量
    def __init__(self):
        self.count = 20
        
    def process(self):
        print('process', self.count)
        
    @staticmethod
    def static_process():
        print('static_process')
        print(MyClass.bar)
        
    @classmethod
    def class_process(cls):
        print('class_process')
        print(cls.bar)
        print(cls)
        cls().process()
        print(cls().count)
        
print(MyClass.bar)
MyClass.static_process()
MyClass.class_process()
MyClass.bar = 123
MyClass.static_process()
代码语言:txt
复制
1
代码语言:txt
复制
static_process
代码语言:txt
复制
1
代码语言:txt
复制
class_process
代码语言:txt
复制
1
代码语言:txt
复制
<class '__main__.MyClass'>
代码语言:txt
复制
process 20
代码语言:txt
复制
20
代码语言:txt
复制
static_process
代码语言:txt
复制
123

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 请解释@classmethod 和@staticmethod 的用法和区别
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com