美文网首页
Python中class的实例方法、类方法和静态方法的区别

Python中class的实例方法、类方法和静态方法的区别

作者: 苏糊 | 来源:发表于2017-03-03 16:56 被阅读113次

先上一段摘来的代码,这段代码运行一下会更好的理解这三类方法的区别
# -- coding: utf-8 --

class Test(object):
    def __init__(self):
        self.name = 'leon'

    def InstanceFun(self):              #实例方法,通过实例调用。实例方法隐含的参数为类实例
        print("InstanceFun")
        print(self.name)

    @classmethod
    def ClassFun(cls):                  #类方法,理论上通过类调用,实际上也可以通过实例调用。类方法隐含的参数为类本身。
        print("ClassFun")
        print(cls)

    @staticmethod
    def StaticFun():                    #静态方法,通过实例化的对象调用,也可以直接通过类调用。静态方法无隐含参数,主要为了类实例也可以直接调用静态方法。
        print("StaticFun")

t = Test()

Test.InstanceFun()
t.InstanceFun()

Test.ClassFun()
t.ClassFun()

Test.StaticFun()
t.StaticFun()

尝试运行Test.InstanceFun()报错,报错信息如下。 尝试运行 t.InstanceFun()正常。


运行Test.InstanceFun()报错

这个说明实例方法,只能通过实例调用。
运行Test.ClassFun()、t.ClassFun()、Test.StaticFun()、t.StaticFun()均成功,说明类方法和静态方法都能通过实例化的对象调用,也可以直接通过类调用。

总结一下:

1、实例方法,通过实例调用。实例方法隐含的参数为类实例。
2、类方法,理论上通过类调用,实际上也可以通过实例调用。类方法隐含的参数为类本身。
3、静态方法,通过实例化的对象调用,也可以直接通过类调用。静态方法无隐含参数,可以不接收参数,主要为了类实例也可以直接调用静态方法。

类方法和静态方法皆可以访问类的静态变量(类变量),但不能访问实例变量,ClassFun、StaticFun是不能访问self.name的,而InstanceFun则可以。

如有错误,还望指正

相关文章

网友评论

      本文标题:Python中class的实例方法、类方法和静态方法的区别

      本文链接:https://www.haomeiwen.com/subject/rslrgttx.html