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

 #coding:utf8
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('')
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 实例方法,类方法和静态方法的更多相关文章

  1. python 浅析类方法与静态方法

    类方法,静态方法的定义 Python 是双面向的,既可以面向函数编程,也可以面向对象编程,所谓面向函数就是单独一个. py 文件,里面没有类,全是一些函数,调用的时候导入模块,通过模块名.函数名()即 ...

  2. python 用类方法和静态方法实现是追加写文件内容,和读指定行号的内容

    用类方法和静态方法实现:一个是追加写文件一行内容,一个是读指定行号的内容   #coding=utf-8   class handle_file(object):     def __init__(s ...

  3. python 面向对象 类方法,静态方法,property

    property 内置装饰器函数 只在面向对象使用 把方法当初属性使用(方法不加参数) 例子: class Rectangle: def __init__(self,long,wide,color): ...

  4. 关于python的类方法、实例方法和静态方法区别

    python的类方法需要在方法前面加装饰器:@classmethod ,静态方法是在方法前面加装饰器:@staticmethod. 类方法.类属性是属于类自身,属于类自身的命名空间,和实例方法.实例属 ...

  5. Python类方法、静态方法与实例方法

    静态方法是指类中无需实例参与即可调用的方法(不需要self参数),在调用过程中,无需将类实例化,直接在类之后使用.号运算符调用方法. 通常情况下,静态方法使用@staticmethod装饰器来声明. ...

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

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

  7. Python类方法、静态方法与实例方法 -----类里面不需要实例化参数 和没带self的函数 调用此函数的方法

    来源: https://www.cnblogs.com/blackmatrix/p/5606364.html 静态方法是指类中无需实例参与即可调用的方法(不需要self参数),在调用过程中,无需将类实 ...

  8. 【面试必问】python实例方法、类方法@classmethod、静态方法@staticmethod和属性方法@property区别

    [面试必问]python实例方法.类方法@classmethod.静态方法@staticmethod和属性方法@property区别 1.#类方法@classmethod,只能访问类变量,不能访问实例 ...

  9. Python Class 的实例方法/类方法/静态方法

    实例方法.类方法.静态方法 class MyClass(object): class_name = "MyClass" # 类属性, 三种方法都能调用 def __init__(s ...

随机推荐

  1. 微信内置浏览器私有接口WinXinJsBridge介绍

    关于微信内置浏览器私有接口WeiXinJsBridge,只是之前接触过的一个微信公众号项目中遇到过,不过并没有深入研究过,可以说并没有了解过... 刚好今天无意中看到了这方面的知识,就补习一下,弥补一 ...

  2. SVN服务搭建

    yum方式搭建: 1,安装SVN服务端 直接用apt-get或yum安装subversion即可(当然也可以自己去官方下载安装) sudo apt-get install subversion 2,创 ...

  3. Oracle排序分析函数

    在Oracle自拓展SQL功能中,分析函数(Analytical Function)是非常强大的工具. 本篇我们介绍几个Oracle典型的排序分析函数,来帮助我们解决实际问题. 1.从rownum谈起 ...

  4. flex布局应用于踩坑

    一.预告 本文不是一篇入门的文章所有请符合以下条件的战斗人员绕道: 1.初学前端,对前端的传统布局还不是很熟悉的人 2.后端人员对前端不打算深入学习的同学 二.开篇 flex布局原本是好几个月前就一直 ...

  5. Laravel路由和控制器的绑定

    路由和控制器的关系 路由文件地址在\app\Http\routes.php,我们来看两种不同的路由. Route::get('/', function () { return view('welcom ...

  6. 项目架构开发:数据访问层之Query

    接上文 项目架构开发:数据访问层之Repository 上一章我们讲了IRepository接口,这张我们来讲IQuery 根据字面意思就可以知道,这次主要讲数据查询,上一章我们只针对单表做了查询的操 ...

  7. 清空file文件域的方法

    我们在实际应用中经常希望能把文件域给清空,比如使用change事件时,因为不清空再次选择同一文件时将不在触发change事件. 但是在IE中,由于安全设置的原因,是不允许更改文件域的值的,也就是不能使 ...

  8. 图片流量节省大杀器:基于腾讯云CDN的sharpP自适应图片技术实践

    目前移动端运营素材大部分依赖图片,基于对图片流量更少,渲染速度更快的诉求,我们推动CDN,X5内核,即通产品部共同推出了一套业务透明,无痛接入的CDN图片优化方案:基于CDN的sharpP自适应图片无 ...

  9. oracle expdp和impdp常用命令选项

    一.expdp导出数据库 1.按用户导出 expdp scott/tiger@orcl DIRECTORY=oracle_dmp dumpfile=bak.dmp schemas=scott vers ...

  10. Greenplum 简单性能测试与分析

    如今,多样的交易模式以及大众消费观念的改变使得数据库应用领域不断扩大,现代的大型分布式应用系统的数据膨胀也对数据库的海量数据处理能力和并行处理能力提出了更高的要求,如何在数据呈现海量扩张的同时提高处理 ...