#!/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
基本上与全局函数相同,较少会使用到.