美文网首页
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