Python面向对象:方法(有坑待填)

方法分为普通方法,静态方法和类方法。
类方法和静态方法唯一的区别就是:有没有一个指向当前类的参数
** 这三个方法在内存中都存放在类中 **
(普通字段是唯一存放内存中实例中的)

Python面向对象:方法(有坑待填)_第1张图片
类的三种方法

  • 普通方法,只能由对象调用,里面必有一个参数--self
  • 静态方法,就相当于Java中的静态方法,不需要实例也可以调用。实例也可以调用。
  • 类方法中必有一个变量为类,不管是由类调用还是由对象调用。
Python面向对象:方法(有坑待填)_第2张图片
类方法的调用

类方法的作用:
** 类方法的作用之一就是弥补Python中只能有一个构造函数的不足,Java中可以有多种构造函数,但是Python中只能有一个。**

Python面向对象:方法(有坑待填)_第3张图片
类方法增加构造函数

** 静态方法也可以**,以下是用静态方法增加构造函数
Python面向对象:方法(有坑待填)_第4张图片
静态方法增加构造函数

静态方法和类方法的继承不同

  • 类方法是属于类的,所以有子类继承后,子类的实例调用类方法调用子类的类方法和类属性
  • 静态方法是属于那个类的,所以子类继承后,那个静态方法已经和原来的类绑定了,所以子类继承来的静态方法还是原来父类的静态方法
    下面这个这个例子表明,如果子类的既有类方法也有静态方法,那么子类优先调用自己的静态方法和类方法


    Python面向对象:方法(有坑待填)_第5张图片
    子类俱有优先调用

    子类中这两个方法都没有:

  • 调用静态方法,则方法和字段都来自于父类
  • 调用类方法
    • 若子类无方法则调用父类方法和子类自己的属性
    • 如果子类没有父类类方法所调用的属性,报错

Python面向对象:方法(有坑待填)_第6张图片

静态方法调用静态方法中,也可以用类方法表示

Python面向对象:方法(有坑待填)_第7张图片
双静态方法使用类方法

这时,即使原来的类名改变了,由于类内部没有使用原来的类名引用,所以类名即使改变也没有事情
** 待埋坑:抽象方法+混合静态方法,类方法,抽象方法**

你可能感兴趣的:(Python面向对象:方法(有坑待填))