python笔记 实例方法/类方法/静态方法

84 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第26天,点击查看活动详情

0 环境

  • 编辑器:pycharm或者vscode
  • 系统版本:windows10
  • python版本:3.9.6

1 实例方法

虽然方法的定义都放在类里面的,但是有的方法可以被类调用,而有些方法呢是可以被实例调用的。怎么知道哪些方法是它们可以调用的呢?

如下代码:当我用类直接调用show方法时,会直接报错少个self,但是我用实例调用却可以,说明实例调用方法时,会自动传进去self参数,self就是该实例。实例方法只能是实例来调用。

class Demo:
    def show(self):
        print("实例方法")

if __name__ == '__main__':
    Demo().show()
    Demo.show()

image.png

2 类方法

假如我就想要个类方法@classmethod+方法入参里加入cls。缺一不可。

代码如下:上面说了怎么就可以把方法变成类方法了,测试一下,类.类方法,得出下面的id(类名)和id(cls),它们的结果是一致的。说明是没问题的。还有就是@classmethod+方法入参里加入cls,你随意去掉一个条件,就会报错,可以试试。

class Demo:
    def show(self):
        print("实例方法")

    @classmethod
    def cls_show(cls):
        print("Demo -->", id(Demo))
        print("类方法 -->", id(cls))

if __name__ == '__main__':
    # Demo().cls_show()
    Demo.cls_show()

image.png

那么实例可以类方法?结果如下:事实上也是可以的,实例调用它的时候,传入第一个参数还是类。 不管有无实例化(类或者实例调用),都是可以得到想要的结果的。

image.png

4 静态方法

静态方法更加简单,就是只需要在该方法上添加@staticmethod即可,无需传参,对一个参数没有要求。 如下代码:我可以使用类或者实例直接调用,结果如下第一张图,但是你会想好像么有啥用处。如下第二张图,好处不用多说。空参数又没有@staticmethod,就会报缺self(默认传入一个实例对象的)。

class Demo:
    @staticmethod
    def static_show():
        print("静态方法")

image.png

image.png

5 总结

实例方法的标识就是首个参数是self,只能被实例化后调用,除了实例方法比较专一,类方法(@classmethod+方法第一个参数是cls)和静态方法(只需要方法上加个@staticmethod),类和实例都可以调用它们,静态方法一旦去掉@staticmethod,需要加个self的,因为默认是传入一个实例对象的。