类方法(类似C++和java中的静态方法):
1. 在类定义中,使用@classmethod装饰器修饰的方法
2. 必须至少有一个参数,且第一个参数留给了cls,cls指代调用者即类自身
3. cls这个标识符可以是任意合法名称,但是为了易读,最好不要修改
4. 通过cls可以直接操作类的属性
静态方法:
1. 在类定义中,使用@staticmethod装饰器修饰的方法
2. 调用时,不会隐式的传入参数,比如(self、cls)(其他参数可以类似普通函数一样定义)
静态方法只是表明这个方法属于这个名字空间。函数归在一起,方便管理
示例代码如下:
class MyClass:
xxx = "XXX"
def foo(self):
print("foo")
@classmethod
def clsmth(cls): #类方法定义,类方法至少有一个参数,且第一个参数必须为类参数,即cls,cls表示类本身,区别于其他self,因为self代表类的实例或者类对象
print("{}.xxx = {}".format(cls.__name__, cls.xxx))
@staticmethod #静态方法可以理解为属于类范围内的普通方法,不需要传self也不需传cls参数
def staticmth(): #类的静态方法定义
print("static")
a = MyClass()
a.foo()
MyClass.bar()
MyClass.clsmth()
a.clsmth() #等价于a.__class__.clsmth()
MyClass.staticmth()
a.staticmth()