14. 类变量与类方法

14.1. 类变量

在类中方法之外定义的变量。

  • 类和实例都可以访问类变量

  • 实例只可以访问,不可以修改

14.2. 实例变量

类实例(对象)可使用的变量,以 self. 开头。

14.3. 实例方法

类实例(对象)可调用的函数,形参包括 self

14.4. 静态方法

使用 @staticmethod 装饰,是定义在类内的普通函数。

  • 静态方法不能访问类变量、实例变量、实例方法

  • 类和实例都可以调用静态方法,需要使用 cls / self 来限定。

  • 静态方法调用其他静态方法时,需要使用类名来限定,即 <类名>.<静态方法名>

14.5. 类方法

使用 @classmethod 装饰,形参包括 cls

  • 类方法可以访问和修改类变量,不能访问实例变量、实例方法

  • 类和实例都可以访问类方法

 1class A:
 2    var = 100        ## 类变量
 3    def __init__(self):
 4        self._a = 0  ## 实例变量
 5        self.__b = 1 ## 实例变量
 6        self.c = 2   ## 实例变量
 7
 8    def _foo(self):
 9        print "_foo"
10
11    def __foo(self):
12        print "__foo"
13
14    def foo(self):
15        self.__foo()
16        print "__b:", self.__b
17        print self.static_func(1, 5)
18
19    @staticmethod
20    def static_func(a, b):
21        print "static_method"
22        return a + b
23
24    @classmethod
25    def class_func(cls, num):
26        print "class_method"
27        cls.var = num
28        print cls.static_func(-1, 1)
29
30    @staticmethod
31    def static_func2(a, b):
32        ## 静态方法调用静态方法
33        return A.static_func(a*b, a/b)
 1>>> obj = A()
 2>>> print obj.static_func(1,3)
 3static_method
 44
 5>>> A.class_func(200)
 6class_method
 7static_method
 80
 9>>> print A.var
10200
11>>> obj.foo()
12__foo
13__b: 1
14static_method
156

14.6. 参考资料

  1. Python-类变量,成员变量,静态变量,类方法,静态方法,实例方法,普通函数

  1. 一张图了解 python 类方法与类变量 类变量与实例变量