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

[经验分享] Python 学习入门(37)—— @classmethod函数

[复制链接]
发表于 2017-5-2 10:44:03 | 显示全部楼层 |阅读模式
@classmethod : 类方法
@staticmethod : 静态方法
类方法和静态方法的调用一样,都是通过类就可以直接调用。
区别:类方法,需要传入该类,定义类方法的时候要传一个默认的参数cls。静态方法则不用。


示例:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# blog.ithomer.net
class Test(object):
x = 11
def __init__(self, _x):
self._x = _x
print("Test.__init__")
@classmethod
def class_method(cls):
print("class_method")
@staticmethod
def static_method():
print("static_method")
@classmethod
def getPt(cls):
cls.class_method()
cls.static_method()
if "__main__" == __name__:
Test.class_method()         # class_method
Test.static_method()        # static_method
Test.getPt()                # class_method  static_method
t = Test(22)                # Test.__init__
t.class_method()            # class_method
t.static_method()           # static_method
print Test.x                # 11
#     print Test._x
print t.x                   # 11
print t._x                  # 22
#     t.getPr()   # 'Test' object has no attribute 'getPr'运行结果:
class_method
static_method
class_method
static_method
Test.__init__
class_method
static_method
11
11
22
Traceback (most recent call last):
File "/home/homer/workspace/myPython/com/connmiliao.py", line 40, in <module>
t.getPr()
AttributeError: 'Test' object has no attribute 'getPr'

  示例:@property,@staticmethod,@classmethod


#!/usr/bin/env python
# -*- coding: utf-8 -*-
# blog.ithomer.net
class MyClass(object):
def __init__(self):
print '__init__'
self._name = 'blog.ithomer.net'
@staticmethod
def static_method():
print 'This is a static method!'
def test(self):
print 'call test'
@classmethod
def class_method(cls):
print 'cls: ',cls
print 'cls.name: ',cls.name
print 'cls.static_method(): ',cls.static_method()
instance = cls()
print 'instance.test(): ',instance.test()
@property
def name(self):
return self._name
@name.setter
def name(self, value):
self._name = value
if __name__ == '__main__':
MyClass.static_method()
MyClass.class_method()
mc = MyClass()
print mc.name
mc.name = 'forum.ithomer.net'  
print mc.name运行结果:  This is a static method!
cls: <class '__main__.MyClass'>
cls.name: <property object at 0x150d680>
cls.static_method(): This is a static method!
None

__init__
instance.test(): call test
None
__init__
blog.ithomer.net
forum.ithomer.net

运维网声明 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-372025-1-1.html 上篇帖子: 也来一例内螺旋数组python实现 下篇帖子: Python 学习入门(29)—— 消息队列
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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