浅谈python中的实例方法、类方法和静态方法


Posted in Python onFebruary 17, 2017

在学习python代码时,看到有的类的方法中第一参数是cls,有的是self,经过了解得知,python并没有对类中方法的第一个参数名字做限制,可以是self,也可以是cls,不过根据人们的惯用用法,self一般是在实例方法中使用,而cls则一般在类方法中使用,在静态方法中则不需要使用一个默认参数。在下面的代码中,InstanceMethod类的方法中,第一个参数是默认的self,在这里可以把self换成任何名字来表示,不会有任何影响。在类调用的时候,需要满足参数的个数要求(参数中含有*args是例外),例如13行中,类调用没有参数的时候,会提示错误。同样,实例方法的参数个数也应该满足要求,例如16行中也会报错。实例方法的一个主要特点就是需要绑定到一个对象上,python解析器会自动把实例自身传递给方法,如14行所示,而直接使用InstanceMethod.f1()调用方法是不行的。

class InstanceMethod(object):
 def __init__(self, a):
  self.a = a
 def f1(self):
  print 'This is {0}.'.format(self)
 def f2(self, a):
  print 'Value:{0}'.format(a)
if __name__ == '__main__':
 # im = InstanceMethod()
 im = InstanceMethod('233')
 im.f1()
 # im.f2()
 im.f2(233)

静态方法和类方法都需要使用修饰器,分别使用的是staticmethod和classmethod。静态方法是和类没有关系的,我觉得就是包装在类中的一般方法,如下例子中,调用静态方法使用实例和不使用实例都是可以的。类方法中,默认的第一个参数使用的是cls,类方法也可以不需要实例而直接使用类调用。对于这三种不同的方法,使用方法如下例所示。那么问题来了,既然有了实例方法,类方法和静态方法与之相比又有什么好处呢?

在类方法中,不管是使用实例还是类调用方法,都会把类作为第一个参数传递进来,这个参数就是类本身。如果继承了这个使用类方法的类,该类的所有子类都会拥有了这个方法,并且这个方法会自动指向子类本身,这个特性在工厂函数中是非常有用的。静态方法是和类与实例都没有关系的,完全可以使用一般方法代替,但是使用静态方法可以更好的组织代码,防止代码变大后变得比较混乱。类方法是可以替代静态方法的。静态方法不能在继承中修改。

class test(object):
 def instance_method(self):
  print 'This is {0}'.format(self)
 @staticmethod
 def static_method():
  print 'This is static method.'
 @classmethod
 def class_method(cls):
  print 'This is {0}'.format(cls)
if __name__ == '__main__':
 a = test()
 a.instance_method()
 a.static_method()
 a.class_method()
 print '----------------------------------------'
 # test.instance_method()
 test.static_method()
 test.class_method()

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Python 相关文章推荐
浅谈python jieba分词模块的基本用法
Nov 09 Python
Pycharm 设置默认头的图文教程
Jan 17 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
Feb 21 Python
Python3利用print输出带颜色的彩色字体示例代码
Apr 08 Python
NumPy 基本切片和索引的具体使用方法
Apr 24 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
Jun 26 Python
解决yum对python依赖版本问题
Jul 05 Python
python通过http下载文件的方法详解
Jul 26 Python
使用virtualenv创建Python环境及PyQT5环境配置的方法
Sep 10 Python
TensorFlow实现保存训练模型为pd文件并恢复
Feb 06 Python
python tkinter之 复选、文本、下拉的实现
Mar 04 Python
Python安装第三方库攻略(pip和Anaconda)
Oct 15 Python
Python之日期与时间处理模块(date和datetime)
Feb 16 #Python
python字符串中的单双引
Feb 16 #Python
使用PyV8在Python爬虫中执行js代码
Feb 16 #Python
Python错误提示:[Errno 24] Too many open files的分析与解决
Feb 16 #Python
Python变量和数据类型详解
Feb 15 #Python
Django学习笔记之Class-Based-View
Feb 15 #Python
关于Python面向对象编程的知识点总结
Feb 14 #Python
You might like
ThinkPHP CURD方法之order方法详解
2014/06/18 PHP
php的对象传值与引用传值代码实例讲解
2021/02/26 PHP
jquery创建div 实现代码
2009/04/27 Javascript
纯JAVASCRIPT图表动画插件Highcharts Examples
2011/04/16 Javascript
jquery遍历函数siblings()用法实例
2015/12/24 Javascript
深入浅析AngularJS和DataModel
2016/02/16 Javascript
Javascript动画效果(2)
2016/10/11 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
2016/11/22 Javascript
使用Vue.js创建一个时间跟踪的单页应用
2016/11/28 Javascript
xmlplus组件设计系列之下拉刷新(PullRefresh)(6)
2017/05/03 Javascript
AngularJS $http post 传递参数数据的方法
2018/10/09 Javascript
使用canvas实现一个vue弹幕组件功能
2018/11/30 Javascript
Vue3 中的数据侦测的实现
2019/10/09 Javascript
python构建自定义回调函数详解
2017/06/20 Python
python实现彩色图转换成灰度图
2019/01/15 Python
django多文件上传,form提交,多对多外键保存的实例
2019/08/06 Python
Python 找出出现次数超过数组长度一半的元素实例
2020/05/11 Python
python读取hdfs并返回dataframe教程
2020/06/05 Python
Python调用C/C++的方法解析
2020/08/05 Python
vscode调试django项目的方法
2020/08/06 Python
python 装饰器重要在哪
2021/02/14 Python
日本最大的购物网站:日本乐天市场(Rakuten Ichiba)
2020/11/04 全球购物
如何开发一个JQuery插件
2016/07/28 面试题
大学生专科毕业生自我评价
2013/11/17 职场文书
自荐书范文范例
2014/02/13 职场文书
材料专业毕业生求职信
2014/02/26 职场文书
个人简历自荐信
2014/06/26 职场文书
民主生活会整改措施(党员)
2014/09/18 职场文书
2014年政教处工作总结
2014/12/20 职场文书
绵山导游词
2015/02/05 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
运动会观后感
2015/06/09 职场文书
企业法人任命书
2015/09/21 职场文书
学校教师培训工作总结
2015/10/14 职场文书
《小乌鸦爱妈妈》教学反思
2016/02/19 职场文书
【海涛解说】史上最给力比赛,挑战DOTA极限
2022/04/01 DOTA