python之 @staticmethod 和 @classmethod

简介: python之 @staticmethod 和 @classmethod

引言

这篇文章是我对python里面的静态方法(staticmethod) 和 类方法(classmethod)的一些见解,希望能够帮助到大家。在准备写这篇文章之前我也是很迷茫,总是不理解,得过且过,能看懂代码就行,反正又不常用,就没放在心上。但是最近由于项目需要,满屏的静态方法和类方法属实让我有点迷茫,怎么办,想要继续下去,那就只有学了。不逼自己一把,永远不知道自己的潜力有多大。


一个比较简单粗暴的区分方式:要决定是使用@staticmethod还是@classmethod,你必须看看类方法内部。如果你的方法访问了类中的其他变量/方法,那么就使用@classmethod。另一方面,如果方法没有接触到类中的任何其他变量,那么就使用@staticmethod。

但是其设计有更深的逻辑联系:

classmethod主要用于替代构造函数。

staticmethod不使用对象的状态,甚至不使用类本身的结构。它可以是一个类外部的函数。它只放在类的内部,用于分组具有类似功能的函数(例如,像Java的数学类静态方法)


@classmethod

Person.printAge = classmethod(Person.printAge)


@staticmethod

Calculator.add_numbers = staticmethod(Calculator.add_numbers)


能看懂这两行代码,应该就能理解什么是静态方法,什么是类方法了吧。当然,看的不太懂也没有关系,下面通过栗子来详细的解说一下\

@classmethod

什么是类方法?

什么是类方法?

类方法是绑定到类而不是其对象的方法。它不需要创建类实例,就像staticmethod 一样。


静态方法和类方法之间的区别在于:


静态方法对类一无所知,只处理参数

类方法适用于类,因为它的参数始终是类本身。

类方法可以由类及其对象调用。


Class.classmethod()
Class().classmethod()

但无论如何,class方法始终附加到一个类,其中第一个参数作为类本身。cls


def classMethod(cls, args…)

例子1

代码:

class Person:
    age = 25
    def printAge(cls):
        print('The age is:', cls.age)
Person.printAge = classmethod(Person.printAge)
Person.printAge()

结果:image.png代码:

class Person:
    age = 25
    @classmethod
    def printAge(cls):
        print('The age is:', cls.age)
Person.printAge()

结果:image.png你会发现改变了代码,但是结果还是一样的。你细心就会有所发现,没错,代码中的

****@classmethod等价于Person.printAge = classmethod(Person.printAge)


实例方法可以调用实例方法、类方法、静态方法。类对象只能调用类方法、静态方法。


classmethod与staticmethod用法类似,classmethod可以通过staticmethod代替,在通过类调用时,这两者对于调用者来说是不可区分的。这两者的区别在于,classmethod增加了一个对实际调用类的引用。

🥭🥭方法可以判断出自己是通过基类被调用,还是通过某个子类被调用

🥭🥭通过子类调用时,方法可以返回子类的实例而非基类的实例

🥭🥭通过子类调用时,方法可以调用子类的其他classmethod



目录
相关文章
|
1月前
|
缓存 Java Python
python-静态方法staticmethod、类方法classmethod、属性方法property_python staticmethod类内使用(1)
python-静态方法staticmethod、类方法classmethod、属性方法property_python staticmethod类内使用(1)
|
1月前
|
SQL 分布式计算 算法
python-静态方法staticmethod、类方法classmethod、属性方法property_python staticmethod类内使用
python-静态方法staticmethod、类方法classmethod、属性方法property_python staticmethod类内使用
|
1月前
|
Python
【零碎知识】【Python】@classmethod 与 @staticmethod
【零碎知识】【Python】@classmethod 与 @staticmethod
15 0
|
Python
Python @classmethod和@staticmethod装饰器使用介绍
Python @classmethod和@staticmethod装饰器使用介绍
69 0
|
Python
Python中三个装饰器函数用法(property、staticmethod、classmethod )
Python中三个装饰器函数用法(property、staticmethod、classmethod )
112 0
|
Python
python小知识-classmethod类方法
类方法:@classmethod装饰的方法,参数有一个隐含参数cls,表示类本身,类可以直接调用
207 0
|
5天前
|
机器学习/深度学习 人工智能 前端开发
Python中的模块化编程
【6月更文挑战第17天】Python模块化编程与软件架构设计的关键在于拆分任务到独立模块,提高代码的可维护性、可重用性和可扩展性。例如,学生管理系统可分解为录入、查询和删除模块。MVC和MVVM架构模式有助于组织代码,而微服务和函数式编程将在未来发展中扮演重要角色。通过示例代码,读者能学习如何实现这些概念,提升项目开发效率和质量。
153 57
|
12天前
|
测试技术 虚拟化 云计算
GitHub高赞!速通Python编程基础手册,被玩出花了!
随着云时代的来临,Python 语言越来越被程序开发人员喜欢和使用,因为其不仅简单易学,而且还有丰富的第三方程序库和相应完善的管理工具。 从命令行脚本程序到 GUI程序,从图形技术到科学计算,从软件开发到自动化测试,从云计算到虚拟化,所有这些领域都有 Python 的身影。 今天给小伙伴们分享的这份手册采用以任务为导向的编写模式,全面地介绍了 Python 编程基础及其相关知识的应用,讲解了如何利用 Python 的知识解决部分实际问题。
GitHub高赞!速通Python编程基础手册,被玩出花了!
|
1天前
|
数据挖掘 数据处理 Python
Python编程入门:从基础到实践
【6月更文挑战第26天】这篇文章引导读者逐步学习Python编程,从基础语法如变量、数据类型(整数、浮点数、字符串)到条件语句、循环(if/for/while),再到函数定义和模块导入。通过实例展示了Python在文本处理、数据分析(使用pandas)和Web开发(使用Flask)的应用。学习Python能为初学者开启更广阔的技术领域,如面向对象编程、并发和网络编程等。
|
3天前
|
Python
Python多进程编程详细剖析
Python多进程编程详细剖析
13 3

热门文章

最新文章