1.类方法
-
通过 @classmethod 装饰器修饰的方法就是类方法
-
类方法可以通过类名或对象名调用,但是一般情况下使用类名调用(节省内存)
-
类方法中没有self.在类方法中不可以使用其它对象的属性和方法
-
类方法中一般会有一个参数cls,表示当前类。cls仅仅是一个变量名称,可以用其它变量名来代替,一般情况下会直接使用cls,因为cls是class的简写
-
cls表示的是当前类
2.静态方法
-
通过 @staticmethod 装饰器修饰的方法就是静态方法
-
通过类名或者对象名调用静态方法,一般使用类名调用(节省内存)
-
在静态方法中没有cls这个形式参数,在静态方法中一般不推荐调用其他的方法(对象的方法/类方法/其他的静态方法)
-
静态方法一般是一个单独的方法,只是写在类中
3.类方法和静态方法区别
-
类方法与静态方法的最大区别在于它们的绑定方式。类方法使用`cls`作为第一个参数,表示类本身,而静态方法使用`self`作为第一个参数,表示类的实例。这意味着,类方法可以通过类或实例来调用,而静态方法只能通过实例来调用。让我们通过一个简单的例子来理解它们之间的区别。
4.例子
-
定义类
class Animal():# 类属性name = "动物"# 构造函数def __init__(self, sex, name):self.sex = sexself.name = name# 对象的方法def eat(self):print("吃饭的方法...")# 定义类方法@classmethoddef run(cls):print("我是类方法")# 静态方法@staticmethoddef drink():print("我是静态方法")# 创建对象
animal = Animal("公", "狼青")
# 通过对象调用对象的方法
animal.eat()# 通过类名调用类方法(推荐)
Animal.run()
# 通过对象调用类方法(不推荐)
animal.run()# 通过类名调用静态方法(推荐)
Animal.drink()
# 通过对象名调用静态方法(不推荐)
animal.drink()
-
运行结果
吃饭的方法...
我是类方法
我是类方法
我是静态方法
我是静态方法
-
通过这个例子,我们可以看到类方法和静态方法的区别。类方法可以通过类或实例来调用,而静态方法只能通过实例来调用。另外,当我们想要在方法中访问类的属性和其他方法时,使用类方法更加方便。而当我们需要定义一些与特定对象关联但与类无关的方法时,可以使用静态方法。