Python实例方法、类方法、静态方法区别

1. 实例方法只能被实例对象调用,静态方法(由@staticmethod装饰的方法)、类方法(由@classmethod装饰的方法),可以被类或类的实例对象调用。

  • 实例方法,第一个参数必须要默认传实例对象,一般习惯用self。
  • 静态方法,参数没有要求。
  • 类方法,第一个参数必须要默认传类,一般习惯用cls。
class Foo(object):"""类三种方法语法形式"""def instance_method(self):print("是类{}的实例方法,只能被实例对象调用".format(Foo))@staticmethoddef static_method():print("是静态方法")@classmethoddef class_method(cls):print("是类方法")foo = Foo()
foo.instance_method()
foo.static_method()
foo.class_method()
print('----------------')
Foo.static_method()
Foo.class_method()# output
是类<class '__main__.Foo'>的实例方法,只能被实例对象调用
是静态方法
是类方法
----------------
是静态方法
是类方法

2. 类中静态方法方法调用静态方法的情况

下面的代码,静态方法调用另一个静态方法,如果改用类方法调用静态方法,可以让cls代替类,
让代码看起来精简一些。也防止类名修改了,不用在类定义中修改原来的类名。

# coding:utf-8class Foo(object):X = 1Y = 2@staticmethoddef averag(*mixes):return sum(mixes) / len(mixes)@staticmethoddef static_method():return Foo.averag(Foo.X, Foo.Y)@classmethoddef class_method(cls):return cls.averag(cls.X, cls.Y)foo = Foo()
print(foo.static_method())
print(foo.class_method())# output:
python
python and django

3. 继承类中的区别 从下面代码可以看出,如果子类继承父类的方法,子类覆盖了父类的静态方法

  • 子类的实例继承了父类的static_method静态方法,调用该方法,还是调用的父类的方法和类属性。
  • 子类的实例继承了父类的class_method类方法,调用该方法,调用的是子类的方法和子类的类属性。
class Father(object):X = 1Y = 2@staticmethoddef average(*mixes):return sum(mixes) / len(mixes)@staticmethoddef static_method():return Father.average(Father.X, Father.Y)@classmethoddef class_method(cls):return cls.average(cls.X, cls.Y)class Son(Father):X = 3Y = 5@staticmethoddef average(*mixes):return sum(mixes) / 3s = Son()
# 子类的实例继承了父类的static_method静态方法,调用该方法,还是调用的父类的方法和类属性。
print(s.static_method())            # (1+2)/2=1.5# 子类的实例继承了父类的class_method类方法,调用该方法,调用的是子类的方法和子类的类属性。
print(s.class_method())             # (3+5)/3=2.66666
# 1.5
# 2.6666666666666665

参考:https://zhuanlan.zhihu.com/p/21101992

Python实例方法、静态方法、类方法相关推荐

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

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

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

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

  3. python实例方法、类方法、静态方法的区别_Python 实例方法、类方法、静态方法的区别与作用...

    Python 实例方法.类方法.静态方法的区别与作用 一.总结 一句话总结: 实例方法:第一个参数必须是实例对象,该参数名一般约定为"self",通过它来传递实例的属性和方法(也可 ...

  4. python静态方法可以被继承吗_python 类的继承 实例方法.静态方法.类方法的代码解析...

    这篇文章主要介绍了python 类的继承 实例方法.静态方法.类方法的代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 dt={} class ...

  5. 类的实例方法静态方法类方法属性方法属性

    目录: 分类 实例方法 静态方法 类方法 属性方法 属性 分类: 按照调用方式可以分为3种,实例方法.静态方法.和类方法 实例方法 实例方法只能通过实例对象调用,不能通过类进行调用.实例方法再定义时候 ...

  6. Python 实例方法、类方法、静态方法的区别与作用

    Python中至少有三种比较常见的方法类型,即实例方法,类方法.静态方法.它们是如何定义的呢?如何调用的呢?它们又有何区别和作用呢?且看下文. 首先,这三种方法都定义在类中.下面我先简单说一下怎么定义 ...

  7. 针对Python 实例方法、类方法和静态方法的详解

    1. 概览 先定义一个最简单的 Python 3 的类: class MyClass:def method(self):print('我是实例方法', self)@classmethoddef cla ...

  8. Python 实例方法、类方法和静态方法

    在 Python 中,实例方法(instance method),类方法(class method)与静态方法(static method)经常容易混淆.本文通过代码例子来说明它们的区别. 实例方法 ...

  9. python 实例方法和类方法的区别_实例方法和类方法的区别 python

    展开全部 有区别的,最主要的区别在于,定32313133353236313431303231363533e58685e5aeb931333363363433义类方法主要是要加一个装饰器,@classm ...

  10. python实例方法、类方法@classmethod、静态方法@staticmethod和属性方法@property区别

    1.#类方法@classmethod,只能访问类变量,不能访问实例变量,通过cls参数传递当前类对象,不需要实例化,直接[类名.方法名()],可通过类对象和类对象实例访问 类方法:第一个参数强制为类对 ...

最新文章

  1. Oracle数据库日常维护知识总结
  2. Android DHCP 启动分析【2】
  3. 约会安排 (区间合并)毒瘤题
  4. OpenCV imwrite
  5. vue+element 封装公共js代码
  6. oracle有人用过fra吗,FRA(闪回恢复区)
  7. vue中 vue-router的路由的2种模式 (原生js模拟演示)
  8. webapp构建工具库
  9. 网站建设过程中的:重要页面、关键页面、过程页面、结果页面
  10. 邢台市初中计算机考试,2019年邢台中考总分多少分,邢台中考各个科目多少分
  11. 30 多个有内味道且笑死的人代码注释
  12. html上下两个箭头符号怎么打出来,往返双箭头符号怎么打
  13. Java带宽限速器、Springboot限速器
  14. 2009个人年度总结报告
  15. 【高级持续性威胁追踪】来自Mustang Panda的攻击? 我兔又背锅了!
  16. Travel(SPFA+思维)
  17. vijos 清点人数
  18. 树莓派操作及搭建frp实现内网穿透
  19. jsp中文传值到java乱码_jsp传递参数中文乱码解决办法
  20. php如何运行vbs文件,HTML_用vbs实现在启动 Windows 资源管理器时打开特定文件夹,my-script.vbs c:\scripts 在文件夹 - phpStudy...

热门文章

  1. BGP高防是什么意思呢?BGP高防服务器租用
  2. oracle中reverse,REVERSE关键字之REVERSE函数-Oracle
  3. win10 ensp打开防火墙web界面
  4. 北师大网络教育c语言,《精》北师大网络教育计算机应用基础在线作业完整答案.docx...
  5. Give me 5!
  6. 关于使用msiexec弹出windows installer问题
  7. 对比aspx和html
  8. Java 获取url地址文件流
  9. 智慧水利:河湖水库生态流量监测预警系统
  10. 25 考虑写出一个不抛异常的swap