设为首页 收藏本站
查看: 916|回复: 0

[经验分享] 浅谈python中的一般方法、静态方法(staticmethod)和类方法(classmethod)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-10-28 08:42:48 | 显示全部楼层 |阅读模式
我们先来简单谈谈python类中一般方法、静态方法和类方法的区别。
1、类中的一般方法
    一般方法在定义的时候,需要有表示类实例的参数(通常以self表示,例如def foo(self,arg1,arg2……)),一般方法不能通过类名.方法名()来调用,必须先创建类的实例,然后通过实例.方法名()来调用。
2、类中的静态方法
    类中的静态方法用“@staticmethod”来修饰,静态方法在定义的时候,不需要表示类的实例,可想类外的方法定义一样。静态方法可以通过类名.方法名()实例.方法名()调用。

3、类中的类方法
    类方法用“@classmethod”来修饰,类方法在定义的时候,需要有表示类对象的参数。类方法也可以通过类名.方法名()实例.方法名()调用。(注意:python中,类也是一个对象,这里所说的类对象是指类本身,而非类实例化得对象)


下面我们来看看实际例子:
首先,定义一个类:
1
2
3
4
5
6
7
8
9
10
11
12
class TestMethod(object):  #一般方法、静态方法和类方法与是否新式类无关,这里我们举例用了新式类,但要注意,以下分析同样适用于经典类

    def test(self):        #这里的self参数是必须的,它表示一个类的实例,但并不一定要用字符串“self”来表示,可以用任意字符表示,只是我们通常使用self表示
        print("object")
         
    @classmethod
    def test2(clss):       #这里的clss参数意思必须的,它表示一个类对象,通常该形参我们中“cls”表示
        print("class")
         
    @staticmethod
    def test3():           #这里可以不需要任何形参
        print("static")



首先我们用类名.方法名()来调用:
结果如下:
1
2
3
4
5
6
7
8
>>> TestMethod.test()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unbound method test() must be called with TestMethod instance as first argument (got nothing instead)
>>> TestMethod.test2()
class
>>> TestMethod.test3()
static



可以看到,一般方法test()调用异常,必须通过实例来调用

接着我们再用实例调用:
1
2
3
4
5
6
7
>>> t = TestMethod()
>>> t.test()
object
>>> t.test2()
class
>>> t.test3()
static



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-131629-1-1.html 上篇帖子: python之小电话薄(功能简陋版) 下篇帖子: 使用python+xpath获取下载链接 python
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表