python基础理论(二) classmethod & staticmethod

#代码说明

def aFunc_1():
    pass

class Myclass(object):
    
    a_arg = arg1
    
    def __init__(sefl, *args, **kwargs):
    
          self.another_arg = args[]

    def afunc_2(self):
           print self.another_arg

    @classmethod
    def aFunc_3(cls):
            print "class method"

    @staticmethod
    def aFunc_4():
            print "static method"

程序中涉及到

1)四个函数:aFunc_1(),aFunc_2(self),  aFunc_3(cls), aFunc_4()

  aFunc_1(): 普通函数(全局作用域)

  aFunc_2(self):类函数(类作用域)

  aFunc_3(cls):类成员方法函数(类作用域)

   aFunc_4():类静态方法函数(类作用域)

2)两个属性:a_arg、self.another_arg

  a_arg:类属性

  self.another_arg:类实例属性

3)两个参数:(self)、(cls)

  self:隐式传递对象参数

  cls:隐式传递类参数

访问权限的区别:

函数类别 可否访问a_arg 可否访问self.another_arg 是否需要带self 是否需要带cls
aFunc_1() NO NO NO NO
aFunc_2() Yes Yes Yes NO
aFunc_3() Yes NO NO Yes
aFunc_4() NO NO NO NO

从表中可以看出:

1、类函数(可以访问所有类属性) > 类成员方法函数(只能访问类属性) > 类静态方法函数(在类作用域中的普通函数) > 普通函数(在类作用域外的普通函数)

2、classmethod和staticmethod的区别在于:classmethod有一个类参数(cls) 

3、staticmethod和普通函数的区别在于:前者在类内部,普通函数在类外部

原文地址:https://www.cnblogs.com/thinbottle/p/3011843.html