# coding=utf-8
class Kls(object):
def __init__(self, data):
self.data = data
def printd(self):
print(self.data)
@staticmethod
def smethod(*arg):
print('Static:', arg)
@classmethod
def cmethod(*arg):
print('Class:', arg)
"""
@classmethod
def cmethod(cls, *arg):
print('Class:', arg)
# class method: 不管这个方式是从实例调用还是从类调用,它都用第一个参数把类传递过来
"""
ik = Kls(23)
ik.printd() # 23
ik.smethod() # Static: ()
ik.cmethod() # Class: ( <class '__main__.Kls'>, )
# Kls.printd() # TypeError: unbound method printd() must be called with Kls instance as first argument (got nothing instead)
Kls.smethod() # Static: ()
Kls.cmethod() # Class: ( <class '__main__.Kls'>, )
# Note:
# class method: 不管这个方式是从实例调用还是从类调用,它都用第一个参数把类传递过来
# staticmethod 跟普通函数一样,绑定到类对象实例上,
# vs classmethod: classmethod 可以做需要class参与的动作;staticmehod不行
# vs normalmethod: 它本质上就是一个函数,调用方式和调用函数一样,不同的是它不关注对象和对象内部属性。
# 写到外部会混乱,让类不可控。写到类里面可以很好组织代码
网友评论