首页 > 编程语言 > 详细

Python中的classmethod与staticmethod

时间:2018-01-06 13:57:16      阅读:178      评论:0      收藏:0      [点我收藏+]

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

我们首先做一个比较:

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

原文:https://www.cnblogs.com/geeklove01/p/8213687.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!