0%

python中staticmethod和classmethod区别

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

class MyClass(object):
def __init__(self):
self.ids = "001"

def t1(self, path=""):
print("这个是实例化方法")

@staticmethod
def get_result(path):
print("这个是静态方法")
MyClass().t1() # 显示调用类的实例化方法
print(MyClass().ids)

@classmethod
def get_test1(cls, path):
print("这个是类方法")
cls().t1() # 调用类的实例化方法
print(cls().ids)


MyClass().t1("调用实例化方法")
MyClass.get_result("调用静态方法")
MyClass.get_test1("调用类方法")

总结

  • 类中一般包含三种方法
    • 实例化方法(MyClass().t1()
    • 静态方法(staticmethod
    • 类方法(classmethod
  • classmethod(类方法),第一个参数必须是cls,这个cls指向了类本身,因此可以直接用cls实例化来访问类的内部方法或者属性。
    • cls().t1()
  • staticmethod(静态方法),如果要调用类的内部方法,只能显示地引用类MyClass,这对继承来说可不是一件好事情
    • MyClass().t1()

因此

  • 只要不调用类的内部方法和属性,classmethodstaticmethod都可以使用
  • 若要调用类的内部方法和属性,推荐使用classmethod