定义

为了更好地说明,这里假设我们有一个 Person 类(Class),然后有 JackRobinTony 三个实例(Instance),实例有时候也被称为 对象(Object)。对于这几个方法,

  • 实例方法(Instance Method)与具体的实例绑定(即 JackRobinTony 等实例),可以访问该实例的实例变量、实例方法等。
  • 类方法(Class Method)与类绑定(即 Person 这个类),可以访问该实例的类变量、类方法等。
  • 静态方法(Static Method)没有绑定,不能访问该类别或者对应实例的任何内容,相当于只是把这个方法挂到这个类上而已。

示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Person(object):
    all_people = []

    def __init__(self, name):
        self.name = name
        Person.all_people.append(name)

    def introduce(self):
        print(f'My name is {self.name}.')

    @classmethod
    def count_people(cls):
        print(f'{len(cls.all_people)} people in total: {", ".join(cls.all_people)}.')

    @staticmethod
    def broadcast(msg):
        print(f'Broadcast: {msg}')


def test():
    jack = Person('Jack')
    tony = Person('Tony')

    print('======== Instance method ========')
    jack.introduce()
    tony.introduce()

    print('======== Class method ========')
    Person.count_people()

    print('======== Static method ========')
    Person.broadcast('Everybody run!')


test()

拓展:C++

C++ 的定义跟 Python 的定义略有不同。

Python 中有 ① 实例方法② 类方法③ 静态方法 三种。

但 C++ 只有 ① 实例方法② 类方法 两种,但是 ② 类方法 在 C++ 中也被称为 静态方法,跟 Python 里的 ③ 静态方法 不是一个东西。在实现上,C++ 通过加 static 关键字来修饰类变量、类方法(静态方法)。

参考