美文网首页
如何区分对象方法,类方法和静态方法

如何区分对象方法,类方法和静态方法

作者: NeXTCDO | 来源:发表于2017-09-07 10:34 被阅读21次
class A(object):
    def foo(self,x):
        print "executing foo(%s,%s)"%(self,x)

    @classmethod
    def class_foo(cls,x):
        print "executing class_foo(%s,%s)"%(cls,x)

    @staticmethod
    def static_foo(x):
        print "executing static_foo(%s)"%x

a=A()
a.foo(1)
a.class_foo(2)
a.static_foo(3)
print '--------'
A.class_foo(4)
A.static_foo(5)
print '--------'
print a.foo
print a.class_foo
print a.static_foo


executing foo(<__main__.A object at 0x106ad2190>,1)
executing class_foo(<class '__main__.A'>,2)
executing static_foo(3)
--------
executing class_foo(<class '__main__.A'>,4)
executing static_foo(5)
--------
<bound method A.foo of <__main__.A object at 0x106ad2190>>
<bound method type.class_foo of <class '__main__.A'>>
<function static_foo at 0x106ad1500>

解析

对象方法只能用类的实例对象调用,A.foo(1)会报错,对象方法默认将对象实体a传递给方法的第一个参数(self);
类方法默认传递给第一个参数的是类(class A),通常用变量cls表示,而不是self。类方法既可以用类名调用也可以用类的实例调用。

以上所说默认传递第一个参数,为什么呢?
a.foo 仅仅需要一个参数,是因为foo函数默认是绑定到a这个对象上的

print a.foo
<bound method A.foo of <__main__.A object at 0x106ad2190>>

a.class_foo 是A绑定到class_foo而不是 a;

最后剩下静态方法,说到底它就是一个方法.a.static_foo只是返回一个不带参数绑定的方法.static_foo和a.static_foo只需要一个参数.

print a.static_foo
<function static_foo at 0x106ad1500>

相关文章

  • Java自学-类和对象 类方法

    Java的类方法和对象方法 类方法: 又叫做静态方法 对象方法: 又叫实例方法,非静态方法 访问一个对象方法,必须...

  • iOS-类方法与实例方法

    搬运自 动态方法/实例方法 静态方法/类方法 静态方法和实例方法的区分 使用场景

  • 再论静态方法和类方法

    实例对象可以调用实例方法、类方法、静态方法 类对象只能调用类方法、静态方法

  • 2018-10-18类和对象总结

    1.类方法和静态方法 类中的方法: 对象方法, 类方法, 静态方法 对象方法:a、自带参数selfb、直接声明在类...

  • Swift 中的方法声明

    实例方法 类方法 静态方法 实例方法由实例对象进行调用;类方法和静态方法由类对象进行调用

  • 类和对象

    面向对象概述类类的构造方法静态变量、常量和方法类的主方法对象

  • 如何区分对象方法,类方法和静态方法

    解析 对象方法只能用类的实例对象调用,A.foo(1)会报错,对象方法默认将对象实体a传递给方法的第一个参数(se...

  • day15

    类方法和静态方法 类中方法:对象方法、类方法和静态方法 1.对象方法: a.直接声明在类中b.自带参数selfc....

  • day15

    类方法和静态方法 类中方法:对象方法、类方法和静态方法 1.对象方法: a.直接声明在类中b.自带参数selfc....

  • day15-类和对象

    一、类方法和静态方法 类中方法:对象方法、类方法和静态方法。 1.对象方法: a.直接声明在类中b.自带参数sel...

网友评论

      本文标题:如何区分对象方法,类方法和静态方法

      本文链接:https://www.haomeiwen.com/subject/nnnplxtx.html