python classmethod 与 staticmethod 的区别


#!/usr/bin/env python3

class Kls(object):
    def __init__(self, data=None):
        self.data = data

    def printd(self):
        print(self.data)

    @staticmethod
    def smethod(*arg):
        print('Static:', arg)

    @classmethod
    def cmethod(cls, *arg):
        print('Class:', arg)


ik = Kls("TEST")

Kls.printd(ik)
ik.printd()

Kls.smethod()
ik.smethod()

Kls.cmethod()
ik.cmethod()

大同小异

  • 都是装饰器(函数修饰符)
  • 调用的时候, 都可以不需要先实例化类, 直接使用类名.方法名()调用.
  • @classmethod 第一个参数是自身类, 可以使用类的属性参数; 而@staticmethod 不可以, 只能使用类名.属性名类名.方法名
  • @staticmethod基本上与全局函数相同,较少会使用到.

参考文档


Author: Itaken
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Itaken !
  TOC目录