提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

日常脚本编写过程中时常会用到python的静态方法、实例方法、类方法,本文主要记录自己对这几种方法的理解


一、静态方法

静态方法使用的关键字是@staticmethod,通过在方法前追加此装饰器该方法就属于一个静态方法,静态方法个人理解为它既不依赖实例对象也不依赖于类,它只是需要一个载体即可,所以无论是通过类对象直接调用还是实例对象进行调用都是可以的,需要注意的是在静态方法中无法使用实例属性和方法。所以在日常过程中如果有一个方法实现的功能比较独立的时候就可以考虑使用静态方法实现

class testFunction():

    classAttribute ='monica'
    def __init__(self,example_name):
        self.example_name = example_name
    @staticmethod
    def testStatic():
        print('静态方法使用')
        print('调用类属性',testFunction.classAttribute)
        print('调用实例属性',self.example_name)
if __name__ == '__main__':
    tf = testFunction('example_monica')
    #实例对象调用静态方法
    tf.testStatic()
    #类对象调用静态方法
    testFunction.testStatic()

执行结果
在这里插入图片描述

二、实例方法

实例方法入参第一个值,默认self指代当前调用的对象,不建议使用其它关键字代替,实例方法只能由实例对象进行调用,个人理解由于需要明确是哪个对象在使用当前方法所以实例方法与静态方法和类方法不同对调用者要求严格

class testFunction():

    classAttribute ='monica'
    def __init__(self,example_name):
        self.example_name = example_name

    def testExample(self):
        print('实例方法')
        print('调用实例属性:',self.example_name)
        print('调用类属性:',testFunction.classAttribute)
if __name__ == '__main__':
    tf = testFunction('example_monica')
    #实例对象调用方法
    tf.testExample()
    #类对象调用实例方法
    testFunction.testExample('test')

执行结果
在这里插入图片描述

二、类方法

类方法与静态方法类似需要一个关键词进行装饰@classmethod且方法入参第一个值默认为cls。类方法可以通过实例对象和类对象进行调用,要在初始化前做一些校验的工作时可以考虑使用类方法,比如:在写入excel数据前,需要校验文件是否打开,那这个验证的方法即可以使用类方法实现

class testFunction():

    classAttribute ='monica'
    def __init__(self,example_name):
        self.example_name = example_name
    @classmethod
    def testClassMethod(cls):
        print('类方法')
        print('调用类属性:',cls.classAttribute)
        print('调用实例属性:',cls.example_name)
if __name__ == '__main__':
    tf = testFunction('example_monica')
    #实例对象调用类方法
    tf.testClassMethod()
    #类对象调用类方法
    testFunction.testClassMethod()

执行结果
在这里插入图片描述


四、完整代码

class testFunction():

    classAttribute ='monica'
    def __init__(self,example_name):
        self.example_name = example_name
    @staticmethod
    def testStatic():
        print('静态方法使用')
        print('调用类属性',testFunction.classAttribute)
        print('调用实例属性',self.example_name)
    def testExample(self):
        print('实例方法')
        print('调用实例属性:',self.example_name)
        print('调用类属性:',testFunction.classAttribute)
    @classmethod
    def testClassMethod(cls):
        print('类方法')
        print('调用类属性:',cls.classAttribute)
        print('调用实例属性:',cls.example_name)
if __name__ == '__main__':
    tf = testFunction('example_monica')
    #实例对象调用静态方法
    tf.testStatic()
    #类对象调用静态方法
    testFunction.testStatic()
    #实例对象调用方法
    tf.testExample()
    #类对象调用实例方法
    testFunction.testExample('test')
    #实例对象调用类方法
    tf.testClassMethod()
    #类对象调用类方法
    testFunction.testClassMethod()


总结

以上为自己编码过程中的理解,如果不对的地方欢迎大佬指正和解惑

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐