栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

[7天通关Python基础]-14:classmethod和staticmethod的区别

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[7天通关Python基础]-14:classmethod和staticmethod的区别

python中有三种方法,分别是实例方法、静态方法(staticmethod) 和 类方法(classmethod)。

  • 实例方法只能通过实例对象调用,不能通过类进行调用。实例方法再定义时候使用关键字self,self代表实例对象本身。
  • 静态方法可以使用实例对象调用,也可以使用类进行调用,他的的特点没有参数限制,定义时需要在函数前加@staticmethod
  • 类方法可以被类调用,也可以被实例对象调用,实例调用可以给类增加属性,类的属性修改需要通过类进行修改,类方法需要使用关键字cls,定义时候需要在函数前加@classmethod

看一个示例

class A:
    def fun1(self):
        print('我是实例方法(对象方法),第一个参数是该对象')

    @classmethod
    def fun2(cls):
        print('我是类方法,第一个参数是类')

    @staticmethod
    def fun3(a, b):
        print('我是静态方法,我的参数和此类毫无关系,不写参数也可以')


if __name__ == '__main__':
    a = A()
    a.fun1()  # 我是实例方法(静态方法),第一个参数是该对象
    A.fun1(a)  # 可以用类调用对象方法吗?答案是否定的(虽然此地方可以运行,但是这句话还算对)

    A.fun2()  # 我是类方法,第一个参数是类
    A.fun3(2, 3)  # 我是静态方法,我的参数和此类毫无关系,不写参数也可以
    a.fun2()  # 我是类方法,第一个参数是类。(虽然传递的是对象,但是会知道该对象属于哪个类)
    a.fun3(1, 2)  # 我是静态方法,我的参数和此类毫无关系,不写参数也可以

三种方法除了使用上,其他地方有什么不同呢?

  • 静态方法类似普通函数,参数里面不用传递 self。有一些方法和类相关,但是又不需要类中的任何信息,出于对代码的理解和维护,就可用使用静态方法。静态方法最大的优点是能节省开销,因为它不会绑定到实例对象上,它在内存中只生成一个。
  • 而实例方法每个实例对象都是独立的,开销较大。
  • 而类方法与实例方法类似,但是类方法传递的不是实例,而是类本身。当需要和类交互而不需要和实例交互时,就可以选择类方法。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1002104.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号