python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python cls使用

python中的cls定义与使用

作者:码渣自救计划ing

在 Python中, cls是类方法的第一个参数,代表 类本身(一个类对象),它和实例方法中的 self 地位对等,但指向完全不同,本文介绍python中的cls定义与使用,感兴趣的朋友跟随小编一起看看吧

在 Python 里,cls是‌类方法‌中的第一个参数,它代表‌类本身‌而不是具体的对象实例。虽然它不是 Python 的强制关键字,但按照国际通用的 PEP8 规范,大家都习惯用cls这个名字来指代当前类 。‌‌‌

1. 核心区别:cls vs self

2. 如何定义与使用

必须搭配 @classmethod 装饰器,参数名 cls 是强大约定(可改名但不建议)。

class Person:
    species = "Human"  # 类属性
    def __init__(self, name):
        self.name = name
    # 类方法
    @classmethod
    def create_anonymous(cls):
        # cls 指向 Person,等价于 Person("Anonymous")
        return cls("Anonymous")
    @classmethod
    def get_species(cls):
        return cls.species  # 访问类属性
# 调用时无需传入cls,Python自动传入
p = Person.create_anonymous()
print(p.name)        # 输出: Anonymous
print(Person.get_species())  # 输出: Human

3. 最核心的应用场景(工厂方法)

利用 cls 可以实现多种构造方式,且支持多态继承(子类调用时,cls 自动指向子类,无需重写):

class DateTime:
    def __init__(self, year, month, day):
        self.year = year
        self.month = month
        self.day = day
    @classmethod
    def from_string(cls, date_str):
        # 工厂方法:解析字符串创建实例
        y, m, d = map(int, date_str.split('-'))
        return cls(y, m, d)  # 注意这里用的是 cls
class LogTime(DateTime):
    pass
# 子类调用父类工厂,cls 自动变为 LogTime,返回 LogTime 实例
log = LogTime.from_string("2026-07-15")
print(type(log))  # <class '__main__.LogTime'>

4. 面试易错点:@classmethod vs @staticmethod

class Test:
    @staticmethod
    def static_method():
        return "我不需要cls"

总结一句话:看到 cls,记住它是“类的替身”,专门用于在类方法里操作类属性或灵活地创建本类(及子类)的实例。在写 __init __ 重载或替代构造函数时,它是首选利器。 

到此这篇关于python中的cls定义与使用的文章就介绍到这了,更多相关python cls使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文