小标
2018-12-20
来源 :
阅读 1416
评论 0
摘要:本文主要向大家介绍了Python语言 实例方法、类方法和静态方法,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。
本文主要向大家介绍了Python语言 实例方法、类方法和静态方法,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。
在 Python 中,实例方法(instance method),类方法(class method)与静态方法(static method)经常容易混淆。本文通过代码例子来说明它们的区别。实例方法Python 的实例方法用得最多,也最常见。我们先来看 Python 的实例方法。class Kls(object):
def __init__(self, data):
self.data = data def printd(self):
print(self.data)
ik1 = Kls('leo')
ik2 = Kls('lee')
ik1.printd()
ik2.printd()输出:leo lee上述例子中,printd为一个实例方法。实例方法第一个参数为self,当使用ik1.printd()调用实例方法时,实例ik1会传递给self参数,这样self参数就可以引用当前正在调用实例方法的实例。利用实例方法的这个特性,上述代码正确输出了两个实例的成员数据。类方法Python 的类方法采用装饰器@classmethod来定义,我们直接看例子。class Kls(object):
num_inst = 0
def __init__(self):
Kls.num_inst = Kls.num_inst + 1
@classmethod
def get_no_of_instance(cls):
return cls.num_inst
ik1 = Kls()
ik2 = Kls()print ik1.get_no_of_instance()print Kls.get_no_of_instance()输出:2 2在上述例子中,我们需要统计类Kls实例的个数,因此定义了一个类变量num_inst来存放实例个数。通过装饰器@classmethod的使用,方法get_no_of_instance被定义成一个类方法。在调用类方法时,Python 会将类(class Kls)传递给cls,这样在get_no_of_instance内部就可以引用类变量num_inst。 由于在调用类方法时,只需要将类型本身传递给类方法,因此,既可以通过类也可以通过实例来调用类方法。静态方法在开发中,我们常常需要定义一些方法,这些方法跟类有关,但在实现时并不需要引用类或者实例,例如,设置环境变量,修改另一个类的变量,等。这个时候,我们可以使用静态方法。 Python 使用装饰器@staticmethod来定义一个静态方法。IND = 'ON'class Kls(object):
def __init__(self, data):
self.data = data @staticmethod
def checkind():
return IND == 'ON'
def do_reset(self):
if self.checkind():
print('Reset done for: %s' % self.data) def set_db(self):
if self.checkind():
print('DB connection made for: %s' % self.data)
ik1 = Kls(24)
ik1.do_reset()
ik1.set_db()输出:Reset done for: 24 DB connection made for: 24在代码中,我们定义了一个全局变量IND,由于IND跟类Kls相关,所以我们将方法checkind放置在类Kls中定义。方法checkind只需检查IND的值,而不需要引用类或者实例,因此,我们将方法checkind定义为静态方法。 对于静态方法,Python 并不需要传递类或者实例,因此,既可以使用类也可以使用实例来调用静态方法。实例方法,类方法与静态方法的区别我们用代码说明实例方法,类方法,静态方法的区别。注意下述代码中方法foo,class_foo,static_foo的定义以及使用。class Kls(object):
def foo(self, x):
print('executing foo(%s,%s)' % (self, x)) @classmethod
def class_foo(cls,x):
print('executing class_foo(%s,%s)' % (cls,x)) @staticmethod
def static_foo(x):
print('executing static_foo(%s)' % x)
ik = Kls()# 实例方法ik.foo(1)
print(ik.foo)
print('==========================================')# 类方法ik.class_foo(1)
Kls.class_foo(1)
print(ik.class_foo)
print('==========================================')# 静态方法ik.static_foo(1)
Kls.static_foo('hi')
print(ik.static_foo)输出:executing foo(<__main__.kls object="" at="" 0x0551e190="">,1)
<bound method Kls.foo of <__main__.kls object="" at="" 0x0551e190="">>
==========================================
executing class_foo(
executing class_foo(
<bound method type.class_foo of
==========================================
executing static_foo(1)
executing static_foo(hi)
本文由职坐标整理并发布,希望对同学们学习Python有所帮助,更多内容请关注职坐标编程语言Python频道!
喜欢 | 1
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号