Python中的classmethod与staticmethod

Posted geeklove

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中的classmethod与staticmethod相关的知识,希望对你有一定的参考价值。

首先,这是一个经典的问题。

我们首先做一个比较:

classmethod的第一个参数是cls,即调用的时候要把传入

这意味着我们我们可以在classmethod里使用类的属性,而不是类的实例的属性(显式创建可用)

staticmethod,调用的时候没有参数,即调用的时候我们不传入东西(类,类的实例)

这意味着我们在staticmethod里无法得到类的实例(显式创建可用)

而我们调用类的普通方法的时候,要把self传进去

这意味着在这个普通方法里,我们只能使用类的实例(self)的属性方法

至于怎么调用呢?看下面:

class A(object):  
    bar = 1  
    def foo(self):  
        print foo  
 
    @staticmethod  
    def static_foo():  
        print static_foo  
        print A.bar    # static_foo位于class A中,A相当于全局的,所以能访问到A的属性
      A().foo() # static_foo位于class A中,A相当于全局的,所以能访问到A的方法
    @classmethod  
    def class_foo(cls):  
        print class_foo  
        print cls.bar  # 等于调用 A.bar
        cls().foo()     # 等于调用 A().foo()
  
A.static_foo()  
A.class_foo()  

输出:

static_foo, 1,foo

class_foo,1,foo

一目了然

 

以上是关于Python中的classmethod与staticmethod的主要内容,如果未能解决你的问题,请参考以下文章

python类方法@classmethod与@staticmethod

Python中的 @staticmethod@classmethod方法

python中 staticmethod与classmethod

Python 3.9 MetaClass 属性与 Classmethod 属性

python中的abstractproperty + classmethod装饰器

Python中的@classmethod