程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2024-11(1)

python中@classmethod @staticmethod区别

发布于2020-04-03 10:51     阅读(1536)     评论(0)     点赞(17)     收藏(0)


python中@classmethod @staticmethod区别

Python中有3种方式定义类方法:

  1. 常规方式
  2. @classmethod修饰方式
  3. @staticmethod修饰方式

常规的类方法需要通过self参数隐式的传递当前类对象的实例,见如下代码:

class A(object):
    def f(self, x):
        print("executing foo(%s,%s)" % (self, x))
        print('self:', self)

@classmethod修饰的方法class_f()需要通过cls参数传递当前类对象,见如下代码:

class A(object):
    @classmethod
    def class_f(cls, x):
        print("executing class_foo(%s,%s)" % (cls, x))
        print('cls:', cls)

@staticmethod修饰的方法static_f与C语言的普通函数是一样的,见如下代码:

class A(object):   
    @staticmethod
    def static_f(x):
        print("executing static_foo(%s)" % x)

self和cls的区别不是强制的,只是PEP8中一种编程风格,slef通常用作实例方法的第一参数,cls通常用作类方法的第一参数,即通常用self来传递当前类对象的实例,cls传递当前类对象。



所属网站分类: 技术文章 > 博客

作者:飞龙出海

链接:https://www.pythonheidong.com/blog/article/301867/cc44d695c032e39c871d/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

17 0
收藏该文
已收藏

评论内容:(最多支持255个字符)