Python基础进阶5:类方法的作用,你知道几个?

发布时间:2024年01月03日

你好,我是kelly,今天分享Python类方法的作用。

在类的定义中,使用关键词@classmethod装饰的方法,称为类方法。类方法的第一个参数默认是cls,cls代表类本身。在语法层面,类方法的功能有2个:

1)能访问类属性、方法

2)可以被类和类实例调用

在实践中,业务层面作用也有2个,一是让类具有记忆能力;二是作为工厂方法,个性化实例化类。

一、让类具有记忆能力

如何使用:通过定义类属性,结合类方法,让类具有记忆能力(实例之间的数据共享)。

类属性一般定义在类的顶部,与之相对应的实例属性一般定义在__init__构造函数中。

class Book(object):
    num = 0  # 类属性,在不同实例之间共享

    def __init__(self, title):
        self.title = title  # 实例属性

    def __new__(cls, *args, **kwargs):
        cls.num += 1
        return super().__new__(cls)

    @classmethod
    def get_total_num(cls):
        return cls.num

类Book定义了一个类属性num,可以被不同的类实例所共享,即不管创建多少类实例,内存中始终只存在一个。

In [85]: book1 = Book("西游记")
    ...: book2 = Book("水浒传")
    ...: book3 = Book("三国演义")

In [86]: Book.get_total_num()
Out[86]: 3

这里通过类方法,得到了类实例的数目,这样就实现了类记忆能力。

二、个性化实例化类

能根据不同输入,对类进行不同的实例化。避免显式直接调用类的构造函数,增加程序的灵活性。

class OtherBook(object):
    num = 0

    def __init__(self, title):
        self.title = title

    def __new__(cls, *args, **kwargs):
        cls.num += 1
        return super().__new__(cls)

    @classmethod
    def get_total_num(cls):
        return cls.num

    @classmethod
    def create_book(cls, title):
        return cls(title=title)

在OtherBook类中,定义了类方法create_book,有cls和title两个参数。在类方法create_book内部,根据不同title进行实例化。

In [88]: book1 = OtherBook.create_book("西游记")
    ...: book2 = OtherBook.create_book("水浒传")
    ...: book3 = OtherBook.create_book("三国演义")
    ...: OtherBook.get_total_num()
Out[88]: 3

在实例化时,不显式对OtherBook实例化,而是通过类方法隐式实例化,对外隐藏了实例化的细节。

本文原始版本发表链接:

https://mp.weixin.qq.com/s?__biz=MzI2Mjg3NTY5MQ==&mid=2247484733&idx=1&sn=2cf846dab2259948aeba8f3253016f75&chksm=ea453a79dd32b36fcd17272935891596eb7347945d1b4e3263a124c1f3fbd2850068552a97c1#rd

kelly会在公众号「kelly学技术」不定期更新文章,感兴趣的朋友可以关注一下,期待与您交流。

--over--

文章来源:https://blog.csdn.net/qm5132/article/details/135357772
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。