【python】classmethod 和staticmethod

本文详细介绍了Python中类方法和静态方法的区别与用法。类方法的第一个参数为类本身,仅能访问类变量;静态方法则完全独立于类和实例之外,既不访问实例变量也不访问类变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于classmethod和staticmethod 是之前学类的时候看了一下,知道是类成员方法和静态方法,今天又看到类方法,然后又搜了下,发现自己了解的并不透彻,所以总结一下。

首先classmethod 是类方法,所谓的类方法就是它的第一个参数是本类,是当前的类,它仅仅与类交互,而并不与实例进行交互。所以它是不可以访问实例变量的,但是它可以访问类变量。

对于staticmethod是静态方法,它不用传入self。而且它不可以调用类和实例中的变量。可以理解成它只是在类作用域中的一个函数而已。

普通方法:由对象调用;至少一个self参数;执行普通方法时,自动将调用该方法的对象赋值给self;
类方法:由类调用; 至少一个cls参数;执行类方法时,自动将调用该方法的类复制给cls;
静态方法:由类调用;无默认参数;(可以类比下静态属性啊)

在python2.4以后 我们可以使用生成器来实现静态方法和类成员方法。

下面是一个例子:

class MyClass:
    val1 = 'Value 1'
    def __init__(self):
        self.val2 = 'Value 2'

    @staticmethod
    def staticmd():
        print '静态方法,无法访问val1和val2'

    @classmethod
    def classmd(cls):
        print '类方法,类:' + str(cls) + ',val1:' + cls.val1 + ',无法访问val2的值'

另外,知乎上有一篇很好的文章来讲解这个,图解很好,可以看下。
https://www.zhihu.com/question/20021164

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值