@classmethod
是一个装饰器,用于指示一个方法是一个类方法;
类方法是通过类本身来调用的,而不是通过类的实例来调用。类方法接收的第一个参数是类本身(通常命名为cls
),而不是类的实例。
用处:
创建类的实例。使用类方法作为工厂函数,可以隐藏对象的创建细节,并在创建对象时执行一些额外的逻辑.
由于类方法接收的是类本身作为第一个参数,因此它们可以用于修改类级别的状态或属性。
代码案例:
class MyClass:
# 类级别的变量
class_variable = 0
#类方法
@classmethod
def set_class_variable(cls, value):
cls.class_variable = value
# 类方法
@classmethod
def get_class_variable(cls):
return cls.class_variable
# 类方法
@classmethod
def create_instance(cls, value):
return cls(value)
# 类的构造函数
def __init__(self, value):
self.instance_variable = value
# 使用类方法修改类级别的状态
MyClass.set_class_variable(42)
print(MyClass.get_class_variable()) # 输出: 42
# 使用类方法作为工厂函数创建类的实例
instance = MyClass.create_instance(10)
print(instance.instance_variable) # 输出: 10
set_class_variable
和get_class_variable
都是类方法,它们分别用于设置和获取类级别的变量class_variable;
create_instance
是一个类方法,用作工厂函数来创建类的实例。create_instance
方法内部调用了类的构造函数__init__
来创建实例。