实例方法、类方法、静态方法的区别

爱恋不过是一场高烧,思念是紧跟着好不了的咳。

最近写代码的时候遇到了一个类方法和静态方法的问题, 但一直不知道是做什么的, 于是乎查了查, 总结一下如何使用.

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class A(object):
m = 3

def __init__(self):
self.d = 4

def foo(self, x):
print("executing foo(%s, %s)" % (self, x))

@classmethod
def class_foo(cls, x):
print("executing class_foo(%s, %s)" % (cls, x))

@staticmethod
def static_foo(x):
print("executing static_foo(%s)" % x)

实例方法

1
2
a = A()
a.foo(1)

实例方法需要将类实例化后才能调用

1
executing foo(<__main__.A object at 0x000002853868B860>, 1)

类方法

1
2
3
a = A()
a.class_foo(1)
A.class_foo(2)

类方法可以通过 a.class_foo(1 )来调用,也可以通过 A.class_foo(2) 来直接调用类方法.

1
2
executing class_foo(<class '__main__.A'>, 1)
executing class_foo(<class '__main__.A'>, 2)

静态方法

1
2
3
a = A()
a.static_foo(1)
A.static_foo(2)

同样的,静态方法也可以通过实例或者类直接调用,这种声明方式可以简单理解为只是包裹在类中的普通方法,增加命名空间,

在继承的时候, 可以像使用普通方法一样使用静态方法

1
2
executing static_foo(1)
executing static_foo(2)

类变量

1
print(A.m)

类变量可以在不实例化的情况下调用

1
3

实例变量

1
2
a = A()
print(a.d)

实例变量需要实例化后调用

1
4