前言

Python其实有3个方法,即静态方法(staticmethod),类方法(classmethod)和实例方法,一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法。而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。把某些应该属于某个类的函数给放到那个类里去,有利于组织代码,同时让命名空间更整洁,避免硬编码。

作用和区别

下面我们通过一个例子来理解三者之间的区别,如下:

def foo(x):print "executing foo(%s)"%(x)class A(object):def foo(self,x):print "executing foo(%s,%s)"%(self,x)@classmethoddef class_foo(cls,x):print "executing class_foo(%s,%s)"%(cls,x)@staticmethoddef static_foo(x):print "executing static_foo(%s)"%xa=A()

这里先理解下函数参数里面的self和cls,这个self和cls是对类或者实例的绑定,对于一般的函数来说我们可以直接调用 foo(x) ,这个函数就是最常用的,它的工作跟任何东西(类,实例)无关。

实例方法

对于实例方法,我们知道在类里每次定义方法的时候都需要绑定这个实例,就是 foo(self, x) ,为什么要这么做呢?因为实例方法的调用离不开实例,我们需要把实例自己传给函数,调用的时候是这样的a.foo(x)(其实是foo(a, x))。

类方法

类方法也一样,只不过它传递的是类而不是实例,A.class_foo(x) 。(这里的self和cls可以替换别的参数,但是大家约定的是这两个,不建议用别的。)

静态方法

对于静态方法其实和普通的方法一样,不需要对谁进行绑定,唯一的区别是调用的时候需要使用 a.static_foo(x) 或者 A.static_foo(x) 来调用。

  实例方法 类方法 静态方法
a =A() a.foo(x) a.class_foo(x) a.static_foo(x)
A 不可用 A.class_foo(x) A.static_foo(x)

转载于:https://www.cnblogs.com/Detector/p/7614976.html

【Python】@staticmethod和@classmethod的作用与区别相关推荐

  1. python类方法中使用:修饰符@staticmethod和@classmethod的作用与区别,还有装饰器@property的使用

    python类方法中使用:修饰符@staticmethod和@classmethod的作用与区别,还有装饰器@property的使用(3-20181205) 文章目录: 一. @staticmetho ...

  2. @staticmethod和@classmethod的作用与区别

    一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法. 而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用. 这有利于组织代码,把某些应 ...

  3. python @staticmethod和@classmethod的作用

    一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法. 而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用. 这有利于组织代码,把某些应 ...

  4. Python中@staticmethod和@classmethod的作用和区别

    简单介绍一下两者的区别: 对于一般的函数test(x),它跟类和类的实例没有任何关系,直接调用test(x)即可 #!/usr/bin/python # -*- coding:utf-8 -*-def ...

  5. python中的@classmethod的作用

    推荐 <Python 中的 classmethod 和 staticmethod 有什么具体用途?> 一.简介 1.1 描述 classmethod 修饰符对应的函数不需要实例化,不需要 ...

  6. python staticmethod and classmethod方法

    静态方法无绑定,和普通函数使用方法一样,只是需要通过类或者实例来调用.没有隐性参数. 实例方法针对的是实例,类方法针对的是类,他们都可以继承和重新定义,而静态方法则不能继承,可以认为是全局函数. #h ...

  7. python中的classmethod_面试题:python 中 staticmethod 和 classmethod有什么区别

    面试中经常会问到staticmethod 和 classmethod有什么区别? 首先看下官方的解释: staticmethod: class staticmethod staticmethod(fu ...

  8. python中类方法与实例方法的区别-Python实例方法、类方法、静态方法的区别与作用详解...

    本文实例讲述了Python实例方法.类方法.静态方法的区别与作用.分享给大家供大家参考,具体如下: Python中至少有三种比较常见的方法类型,即实例方法,类方法.静态方法.它们是如何定义的呢?如何调 ...

  9. python的用途实例-Python实例方法、类方法、静态方法的区别与作用详解

    本文实例讲述了Python实例方法.类方法.静态方法的区别与作用.分享给大家供大家参考,具体如下: Python中至少有三种比较常见的方法类型,即实例方法,类方法.静态方法.它们是如何定义的呢?如何调 ...

最新文章

  1. FATE 集群部署 step1
  2. ashx 绝对路径得到物理路径
  3. springMVC——SpringMVC原理详细解析
  4. leetcode 205. 同构字符串(hash)
  5. 2020年中国消费市场发展报告
  6. 最小二乘法求线性回归方程_规范解题第14期 利用“最小二乘法”原理解一道题...
  7. 816D.Karen and Test 杨辉三角 规律 组合
  8. 将Linux可执行文件变成可执行命令
  9. 用asp.net发送电子邮件
  10. QListWidget自定义item的两种方式(二)——使用QWidget作为item
  11. 关于个人网贷查询系统网贷信用查询,公司开发图片整合技术
  12. 使用React,Twilio和Cosmic JS构建约会调度程序
  13. 原创丨嵌入式IMX6ULL学习指引-四大要点-简单也实用
  14. 35+的测试人都去哪儿了?所谓“青春饭”真的只是在贩卖焦虑吗?
  15. 保姆级教学如何在Ubuntu 20.04工作站上配置深度学习环境
  16. 没有实习经验,没有项目经验,简历怎么写?
  17. 用Python快速制作海报级地图
  18. 漫长的岁月,沧海历经的人生
  19. ubuntu1804系统设置在哪里_ubuntu1804安装后设置
  20. openCV专栏(八):图像轮廓:绘制轮廓

热门文章

  1. java jbutton 不显示_java让JButton按钮变成不可见
  2. Gorgeous Sequence线段树区间跟新
  3. java 随机生成图_java – 如何生成随机图?
  4. 多媒体分析与理解_多媒体在课堂教学中应用的研究研究报告(二)
  5. c语言指数怎么表示_Assembly 浮点表示法
  6. C++ 基类和派生类的virtual虚析构函数
  7. 2016蓝桥杯C++A:消除尾一(二进制运算)
  8. 任意进制的转换(C,C++)itoa函数,strtol函数,bitset函数,oct函数,dec函数,hex函数
  9. python分布式多进程框架 Ray
  10. python测试系列教程 —— 调试日志logging