携手创作,共同成长!这是我参与「掘金日新计划 · 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()
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()
那么实例可以类方法?结果如下:事实上也是可以的,实例调用它的时候,传入第一个参数还是类。 不管有无实例化(类或者实例调用),都是可以得到想要的结果的。
4 静态方法
静态方法更加简单,就是只需要在该方法上添加@staticmethod即可,无需传参,对一个参数没有要求。 如下代码:我可以使用类或者实例直接调用,结果如下第一张图,但是你会想好像么有啥用处。如下第二张图,好处不用多说。空参数又没有@staticmethod,就会报缺self(默认传入一个实例对象的)。
class Demo:
@staticmethod
def static_show():
print("静态方法")
5 总结
实例方法的标识就是首个参数是self,只能被实例化后调用,除了实例方法比较专一,类方法(@classmethod+方法第一个参数是cls)和静态方法(只需要方法上加个@staticmethod),类和实例都可以调用它们,静态方法一旦去掉@staticmethod,需要加个self的,因为默认是传入一个实例对象的。