Python classmethod() 函数
classmethod() 是 Python 中用于将方法转换为类方法的内置函数。
类方法是属于类而不是实例的方法,第一个参数是类本身(通常命名为 cls)。类方法可以访问类的属性,但不能访问实例属性。
单词释义: classmethod 是 class method(类方法)的缩写。
基本语法与参数
语法格式
classmethod(function)
参数说明
- 参数 function:
- 类型: 函数对象
- 描述: 要转换为类方法的函数。
函数说明
- 返回值: 返回一个类方法对象。
- 特点: 第一个参数是类本身(cls),不是实例(self)。
实例
示例 1:基础用法
实例
class MyClass:
class_attr = 0
@classmethod
def increment(cls):
cls.class_attr += 1
return cls.class_attr
@classmethod
def get_count(cls):
return cls.class_attr
# 通过类调用(不需要创建实例)
print(MyClass.increment()) # 输出: 1
print(MyClass.increment()) # 输出: 2
print(MyClass.get_count()) # 输出: 2
# 也可以通过实例调用(但不常见)
obj = MyClass()
print(obj.increment()) # 输出: 3
class_attr = 0
@classmethod
def increment(cls):
cls.class_attr += 1
return cls.class_attr
@classmethod
def get_count(cls):
return cls.class_attr
# 通过类调用(不需要创建实例)
print(MyClass.increment()) # 输出: 1
print(MyClass.increment()) # 输出: 2
print(MyClass.get_count()) # 输出: 2
# 也可以通过实例调用(但不常见)
obj = MyClass()
print(obj.increment()) # 输出: 3
运行结果预期:
1 2 2 3
代码解析:
- 类方法通过 @classmethod 装饰器定义。
- 第一个参数是 cls,代表类本身。
示例 2:工厂方法
实例
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
@classmethod
def from_dict(cls, data):
"""从字典创建对象"""
return cls(data['name'], data['age'])
@classmethod
def from_string(cls, s):
"""从字符串创建对象(格式:name-age)"""
name, age = s.split('-')
return cls(name, int(age))
def __str__(self):
return f"{self.name}, {self.age}岁"
# 使用类方法的工厂模式
p1 = Person.from_dict({'name': 'Tom', 'age': 20})
p2 = Person.from_string("Jerry-25")
print(p1) # 输出: Tom, 20岁
print(p2) # 输出: Jerry, 25岁
def __init__(self, name, age):
self.name = name
self.age = age
@classmethod
def from_dict(cls, data):
"""从字典创建对象"""
return cls(data['name'], data['age'])
@classmethod
def from_string(cls, s):
"""从字符串创建对象(格式:name-age)"""
name, age = s.split('-')
return cls(name, int(age))
def __str__(self):
return f"{self.name}, {self.age}岁"
# 使用类方法的工厂模式
p1 = Person.from_dict({'name': 'Tom', 'age': 20})
p2 = Person.from_string("Jerry-25")
print(p1) # 输出: Tom, 20岁
print(p2) # 输出: Jerry, 25岁
运行结果预期:
Tom, 20岁 Jerry, 25岁
类方法常用于实现工厂方法,从不同数据源创建对象。
Python3 内置函数
点我分享笔记