Python的类方法和静态方法

Python的类一共有三种方法:

  • 最常见的类方法
  • Classmethod
  • Staticmethod

下面这个类包含了这三种方法,从调用可以看出他们的用法。

class A(object):
    bar = 1
    def foo(self):
        print 'foo'

    @staticmethod
    def static_foo():
        print A.bar

    @classmethod
    def class_foo(cls):
        cls().foo()

A.static_foo()
A.class_foo()
a = A()
a.foo()

最常见的类方法

所谓类方法就是通过实例作为第一个参数的方法,里面的self参数是对类的绑定。

class A(object):
    def foo(self):
        print 'foo'

Classmethod

如果现在想写一些只与类交互而不和实例交互,我们可以使用类方法和静态方法。
所谓类方法就是只在类中运行,不在实例中运行的方法,定义时,在方法上面用@classmethod装饰器进行装饰,方法的第一个参数接受一个类,而不是一个对象;使用的时候直接用类名.方法名()调用。

class A(object):
    @classmethod
    def class_foo(cls):
        cls().foo()

A.class_foo()

Staticmethod

还有一种方法,运行时不需要实例和类的参与,他的作用是操作类属性而不是实例属性。
比如说要实现一个统计类构造的实例的个数的功能:

class Spam:
     num = 0
     def __init__(self):
        Spam.num += 1

     @staticmethod
     def print_num():
         print Spam.num

a = Spam()
b = Spam()
Spam.print_num()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 类方法和静态方法 @staticmethod 表示下面 方法是静态方法@classmethod 表示下面的方...
    上发条的树阅读 240评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,915评论 18 139
  • 《从今天开始》 从今天开始 我独自一人 面对生活的点滴 悲伤与欢乐交织 活在自己的海洋 因为那里 有我独属的天地 ...
    Jhsen阅读 147评论 0 2
  • 我开始无日无夜的贴广告,揽客人。其实我并不懂什么人需要做人流需要去医院。夏莉告诉我,你只要看在医院门口晃悠,然后几...
    一个大嘴巴子阅读 271评论 0 1
  • 从小出生在一马平川的晋中盆地,所有的亲戚也都是在附近的村庄,从来没有见过大山。直到上初中,学校组织我们春游大佛山,...
    王孟姐姐阅读 330评论 4 3