专栏名称: 志军
分享Python相关技术干货,偶尔扯扯其它的
目录
相关文章推荐
51好读  ›  专栏  ›  志军

@classmethod与@staticmethod的区别

志军  · 公众号  · Python  · 2017-07-18 18:23

正文

请到「今天看啥」查看全文


  • 第四步:接着调用 a.m1(1) ,m1 是实例方法,内部会自动把实例对象传递给 self 参数进行绑定,也就是说, self 和 a 指向的都是同一个实例对象。

  • 第五步:调用 A.m2(1) 时,python内部隐式地把类对象传递给 cls 参数,cls 和 A 都指向类对象。

  • 严格意义上来说,左边的都是变量名,是对象的引用,右边才是真正的对像,为了描述方便,我直接把 a 称为对象,你应该明白我说对象其实是它所引用右边的那个真正的对象。

    再来看看每个方法各有什么特性

    实例方法

    print(A.m1)
    # A.m1在py2中显示为
    0x000002BF7FF9A488>

    print(a.m1)
    0x000002BF7FFA2BE0>>

    A.m1是一个还没有绑定实例对象的方法,对于未绑定方法,调用 A.m1 时必须显示地传入一个实例对象进去,而 a.m1是已经绑定了实例的方法,python隐式地把对象传递给了self参数,所以不再手动传递参数,这是调用实例方法的过程。

    A.m1(a, 1)
    # 等价  
    a.m1(1)

    如果未绑定的方法 A.m1 不传实例对象给 self 时,就会报参数缺失错误,在 py3 与 py2 中,两者报的错误不一致,python2 要求第一个参数self是实例对象,而python3中可以是任意对象。

    A.m1(1






    请到「今天看啥」查看全文