Python实例方法 静态方法 类方法

@staticmethod和@classmethod的区别

  • class 类
  • @staticmethod
  • @classmethod

首先创建一个类,如果想要调用Student类中的方法get_score(),就需要先创建类的实例,然后再用类的对象再去调用方法

In [3]: class Student():
   ...:     def __init__(self, name, score):
   ...:         self.name = name
   ...:         self.score = score
   ...:     def get_score(self):
   ...:         print('%s get %s ' % (self.name, self.score))
   ...:
   ...:

In [4]: student = Student('treehl', 100)

In [5]: student.get_score()
treehl get 100


@staticmethod和@classmethod一个是静态方法,另一个是类的方法,两个装饰器的作用都可以使类不必再创建实例,直接用类来调用方法(类名.方法())

它们使用上的区别

  • @staticmethod不需要传递self,也不需要cls参数,就跟使用函数一样(类名.方法()或类名.属性名)
  • @classmethod也不需要像实例方法一样要传递self,但它需要cls参数(cls.类名()或cls.方法()或cls.属性())

要理解这些,首先需要理解类属性和实例属性的区别


In [6]: class A():
   ...:     bar = 1
   ...:     def foo(self):
   ...:         print 'foo'
   ...:     @staticmethod
   ...:     def static_foo():
   ...:         print 'static_foo'
   ...:         print A.bar
   ...:     @classmethod
   ...:     def class_foo(cls):
   ...:         print 'class_foo'
   ...:         print cls.bar
   ...:         cls().foo()
   ...:

In [7]: A.static_foo()
static_foo
1

In [8]: A.class_foo()
class_foo
1
foo

欢迎访问Treehl的博客
Github

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.列表解析式和字典解析式 列表解析式语法 [expr for value in collection if...
    MononokeHime阅读 5,955评论 0 8
  • 1.1面向对象 面向对象(object-oriented ;简称: OO)至今还没有统一的概念 我这里把它定义为:...
    TENG书阅读 3,641评论 0 0
  • 实例方法: 顾名思义就是给实例使用的方法。就是我们使用最普遍的在类内部定义的方法。 实例方法第一个参数为 self...
    4ffde5305e8f阅读 4,997评论 0 8
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,873评论 0 9
  • 大学(university),“他”究竟是个什么东西,究竟是个怎样的词呢?是像字典里解释的:泛指实施高等教育的学校...
    小安格阅读 3,757评论 16 8

友情链接更多精彩内容