话不多说,直接上程序:

a = 111
class A(object):
  a = 1   def f_instance(self):
    print self.a   @staticmethod
  def f_static():
    print a   @classmethod
  def f_class(cls):
    print cls.a aaa = A()
A.f_class()            #
A().f_class()            #
aaa.f_class()          #
A.f_static()         #
A().f_static()       #
aaa.f_static()       #
A.f_instance()     # TypeError
A().f_instance()  #
aaa.f_instance()  #
f_static()              #NameError aaa.a = 2
A.f_class()            #
A().f_class()          #
aaa.f_class()         #
A.f_static()         #
A().f_static()       #
aaa.f_static()       #
A.f_instance()     # TypeError
A().f_instance()  #
aaa.f_instance()  #
f_static()              #NameError A().a = 2; aaa.a=1   #基于上一步的赋值
A.f_class()             #
A().f_class()          #
aaa.f_class()          #
A.f_static()         #
A().f_static()       #
aaa.f_static()       #
A.f_instance()     # TypeError
A().f_instance()  #
aaa.f_instance()  #
f_static()              #NameError A.a = 10                 #基于上一步的赋值
A.f_class()             #
A().f_class()          #
aaa.f_class()          #
A.f_static()           #
A().f_static()        #
aaa.f_static()         #
A.f_instance()      # TypeError
A().f_instance()   #
aaa.f_instance()    #
f_static()              #NameError
总结如下:
       静态方法 : 和在类外面 定义的方法 效果一样,只不过该方法是类专有的,在外部不可直接访问。类和实例都可以调用。
       类方法 : 相当于所有的 该类的 实例的 “党章”,它的改变 能够影响 之后新的实例中的 实例属性,但是对旧的实例(在类属性改变之前所定义的实例)没有影响。实例也可以调用该方法,和类调用的效果相同,返回的是类属性。
             实例方法:只能在实例化之后被调用,只能影响实例属性,不能影响类属性,并且实例属性在被实例化之后不受类方法的影响,实例化之后也不因类属性改变而改变。类不可以调用,会返回TypeError。

透过代码理解python的静态方法、类方法与实例方法的更多相关文章

  1. python中的类方法,实例方法和静态方法的区别

    类方法是类的方法,在定义的时候要在上方加上一个@classmethod装饰器来进行装饰,形参是cls,类和实例都可以取调用类方法: 实例方法是实例对象方法,只有实例可以调用,类是不能调用的,形参是se ...

  2. IOS—静态方法(类方法)和实例方法

    1.实例方法/动态方法 a).标识符:- b).调用方式:(实例对象    函数) c).实例方法在堆栈上. 2.静态方法/类方法 a).标识符:+ b).调用方式:(类    函数) c).静态方法 ...

  3. IOS基础——静态方法(类方法)和实例方法

    1.实例方法/动态方法 a).标识符:- b).调用方式:(实例对象    函数) c).实例方法在堆栈上. 2.静态方法/类方法 a).标识符:+ b).调用方式:(类    函数) c).静态方法 ...

  4. Python中的类方法、实例方法、静态方法

    类方法 @classmethod 在python中使用较少,类方法传入的第一个参数是 cls,是类本身: 类方法可以通过类直接调用或者通过实例直接调用,但无论哪种调用方式,最左侧传入的参数一定是类本身 ...

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

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

  6. Python面向对象静态方法,类方法,属性方法

    Python面向对象静态方法,类方法,属性方法 属性: 公有属性 (属于类,每个类一份) 普通属性 (属于对象,每个对象一份) 私有属性 (属于对象,跟普通属性相似,只是不能通过对象直接访问) 方法: ...

  7. python面向对象中类对象、实例对象、类变量、实例变量、类方法、实例方法、静态方法

    1. 类对象和实例对象 Python中一切皆对象,Python类本身也是一种对象,类定义完成后,会在当前作用域中定义一个以类名为名字的命名空间.类对象具有以下两种操作: 可以通过“类名()”的方式实例 ...

  8. python静态方法类方法属性方法

    Python的静态方法和类成员方法都可以被类或实例访问,两者概念不容易理清,但还是有区别的: 1)静态方法无需传入self参数,类成员方法需传入代表本类的cls参数: 2)从第1条,静态方法是无法访问 ...

  9. python实例、类方法、静态方法

    [python实例.类方法.静态方法] 参考:http://blog.163.com/yang_jianli/blog/static/161990006201122411586729/

随机推荐

  1. IOS开发之画图形

    1 画线 2 画线第二个方法  相对方法1简洁 3 矩形 4 圆 5 弧线 6画文字(略) 7 画图片(略)

  2. IOS Core Animation Advanced Techniques的学习笔记(四)

    第五章:Transforms   Affine Transforms   CGAffineTransform是二维的     Creating a CGAffineTransform   主要有三种变 ...

  3. leetcode6

    好吧,今天晚上赶项目确实是做不了三道题目了,最近项目在网络编程方面有些进步,学到了东西,有时间再积累下来,很深的体会就是,和别人一起写代码,虽然蛋疼但是比自己一个人写要好点,不过发现自己对链表和排序什 ...

  4. Android中View的基础知识

    View的界限 View就是我们看到的界面,有四个界限范围分别是, Top/Left, Bottom/Right,坐标系从左上到右下.这四个值可以通过任何View的子类调用getTop()/get.. ...

  5. “如何稀释scroll事件”的思考(不小心写了个异步do...while)

    看了下园友的一帖子:http://www.cnblogs.com/xzhang/p/4145697.html#commentform 本来以为是很简单的问题,但仔细想想还挺有意思的.简单的说就是增加事 ...

  6. 第十篇.bootstrap轮播

    使用bootstrap的轮播插件可以向站点添加滑块,内容可以是图像,内嵌框架,视频或其它任何内容,使用轮播插件需要引入bootstrap.min.js. <div id="carous ...

  7. CONTAINING_RECORD的实现

    // 9.25.cpp : 定义控制台应用程序的入口点.///*----------------------------CONTAINING_RECODER的实现------------------- ...

  8. Object类clone方法的自我理解

    网上搜帖: clone()是java.lang.Object类的protected方法,实现clone方法: 1)类自身需要实现Cloneable接口 2)需重写clone()方法,最好设置修饰符mo ...

  9. 一些pc端web事件移动端不再可行

    1.onkeyUp,onkeyDown,onkeyPress等事件不再管用,要用oninput代替   2.onclick事件会有延迟,因为手机需要等待判断是否是双击事件(ondblclick).所以 ...

  10. He faced a maximum sentence of three years.

    Police raided his home in August and found more than 100g of marijuana. He faced a maximum sentence ...