装饰器@staticmethod 和 @classmethod区别

一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法。

而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。

这有利于组织代码,把某些应该属于某个类的函数给放到那个类里去,同时有利于命名空间的整洁。

既然@staticmethod和@classmethod都可以直接类名.方法名()来调用,那他们有什么区别呢

从它们的使用上来看,

@staticmethod不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。

@classmethod也不需要self参数,但第一个参数需要是表示自身类的cls参数。

如果在@staticmethod中要调用到这个类的一些属性方法,只能直接类名.属性名或类名.方法名。

而@classmethod因为持有cls参数,可以来调用类的属性,类的方法,实例化对象等,避免硬编码。

下面上代码。

[python]view plaincopy

classA(object):

bar =1

deffoo(self):

print'foo'

@staticmethod

defstatic_foo():

print'static_foo'

printA.bar

@classmethod

defclass_foo(cls):

print'class_foo'

printcls.bar

cls().foo()

A.static_foo()

A.class_foo()

输出

static_foo

1

class_foo

1

foo

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

推荐阅读更多精彩内容

  • 1.元类 1.1.1类也是对象 在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段。在Python中这...
    TENG书阅读 1,333评论 0 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,079评论 19 139
  • 有很多人都会面临一个艰难抉择,就是你的两个朋友吵起来的时候怎么调和,作为中间者你会感觉自己肩负重任,那么首先,我们...
    月朔新梦阅读 806评论 1 1
  • 无戒365极限挑战日更营 第6天 无业状态已经半年的时间了,从一开始的放肆休闲到现在很有规律的生活安排,感觉如同换...
    HR老白张小编阅读 157评论 1 0
  • 今天我整理一下,有如下事情需要自己最近加班完成。 1.朝阳曹会计财务软件重装的问题,因为对方非正常卸载了数据库,导...
    Z简文阅读 206评论 0 0