ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python 类的封装、继承、抽象、多态

2021-12-06 22:34:21  阅读:136  来源: 互联网

标签:封装 Python self 多态 查找 继承 mro class def


类的封装:

  把类的属性与方法封装起来,做自己调用(隐藏数据和方法)和别人调用(开放数据和方法)

 

类的继承:

  单向继承:像一根绳上的蚂蚱一样,A继承B,B继承C,C继承D,即class D:   class C(D):  class B(C):  class A(B):

  多(向)继承:类A继承B、C、D等多个类的特性,即class A(B,C,D)

 

菱形问题:

  经典类:没有继承object类及其子子孙孙类的类,python2中存在,深度优先

  新式类:继承了object类及其子子孙孙类的类,python3中都是这种,广度优先

  深度优先:继承了多个类的classA,在调用了一个A中没有的方法时,第一次就查找至最终的一个类

  广度优先:继承了多个类的classA,在调用了一个A中没有的方法时,最后一次才查找至最终的一个类

 

mro列表:

  类查找属性或方法时的顺序,按照产生对象的类的mro列表中所列的顺序查找,mro列表使用类名.__mro__或类名.mro()查看

  如:class A(B): print(A.__mro__)  或 print(A.mro())

  如果继承了多个类,而这几个父类中又都有相同的方法,则从mro列表中左边的开始查找。

 

super():

  从父类中调用方法,在父类中查找方法的顺序,按照mro列表中的顺序。

  单继承类中,依次向上查找,

  多继承类中,按照mro列表中父类的顺序进行查找

 

抽象类:

  只能被继承,不能被实例化的类,多用于定义某种方法和属性,为多态提供基础

  import abc

  class Animal(metaclass=abc.ABCMeta):  # 定义一个抽象类

    @abc.abstractmethod # 定义一个抽象方法
    def speak(self): pass

    @abc.abstractmethod
    def login(self):pass

多态:

  接上例:

  class People(Animal):
    def speak(self):
      # print('嗷嗷嗷')
      pass
    def login(self):
      pass


  class Pig(Animal):
    def speak(self):
    print('哼哼哼')

  

  obj = People()
  obj1 = Pig()

  def animal(animal): # 定义一个函数,注意这是一个函数,不是一个类,函数的参数,是一个对象

    return animal.speak()  # 调用并返回对象的方法

标签:封装,Python,self,多态,查找,继承,mro,class,def
来源: https://www.cnblogs.com/qiubuyu/p/15652191.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有