6.2 承继

  • 承继便是一个类能够获得其他一个类中的成员特点和成员办法
  • 效果: 削减代码,增加代码的复用功用,一同能够设置类与类直接的联络
  • 承继与被承继的概念:
    • 被承继的类叫父类,也叫基类,也叫超类
    • 用与承继的类,叫子类Python,也叫派生类
    • 承继与被承继必定存在一个 is-a 联络
  • 承继的特征
    • 一切的类都承继自object类,即一切的算法工程师类都是object类的子类
    • 子类一旦算法工程师需求把握什么承继父类,则能够运用python能够做什么作业父类中除私有成员外的一切内容
    • 子类承继父类后并没有将父类成员完全赋值到子类中,而是经过引证联络拜访调用
    • 子类中能够界说独有的算法开始成员特点和办法
    • 子类中界说的成员和父类成员假定相同,则优先运用python培训班膏火一般多少子类成员
    • 子类假定想扩大父类的办法,能够在界说新办法的一同python自学行吗拜访父类成员来进行代码重用

    能够运用 [父类名.父类成员] 的格局来调用父类成员,也能够运用[super().算法的概念父类成员]的
    格局来调用

  • 承继变量函数的查找次算法开始第问题算法与数据结构
    • 优先查找自己的变量
    • 没有则查找父类
    • 结构函数假定本类中没有界说,则主动查找调用父类结构函数
    • 假定本类有界说,则不再持续向上查找
  • 结构函数
    • 是一类特别的函数,在类进行实例化之前进行调用
    • 假定界说了结构函数,则实例化时运用结构函数,不查找父类结构函数
    • 假定没界说,则主动查找父类结构函数
    • 假定子类没界说,父类的结构函数带参算法数,则结构政策时的参数应该按父类参数结构
  • super
    • super不是python123关键字,而是一个类
    • super的效果是获取MRO(MethodResolutionOrder)列表中的第一个类
    • super与父类直接没任何实质性联络,但经过super能够调用到父类
    • super运用两个办法,常见在结构函数中调用父类的结构函数
  • 单承继和多承继
    • 单承继:每个类只能承继一个类
    • 多承继:每个类容许承继多个类
  • 单承继和多承继的优缺陷
    • 单承继:
      • 传承有序逻辑算法与数据结构清楚语算法工程师学什么专业法简略风险少
      • 功用不能无限扩展,只能在其时仅有的承继链中扩展
    • 多承继:
      • 利益:类的功用扩展便利
      • 缺陷:承继联络紊乱
  • 菱形承继/钻石承继问题
    • 多个子类承继自同一个父类,这些子python编程类又被同一个类承继,

    于是承继联络图构成一个菱形图谱

    • MRO
    • 关于多承继的MRO
      • MRO便是多算法导论承继中,用于保存承继次序的一个列表
      • python自身选用C3算法来多承继的菱形承继来进行核算的成果
      • MRO列表的核算准则:
        • 子类永远在父类python装置教程前面
        • 假定多个父类,则根据承继算法统宗语法中括号内类的书写次序寄存
        • 假定多个类继算法与数据结构承了同一个父类,孙子类中只会选取承继语法

        括号中第一个父类算法工程师学什么专业的父类

  • 结构函数
    • 在政策进行实例化python是什么的时分,系统主动调用的一个函数叫结构函数,一般此函数

    用来对实例化政策进行初始化,顾名

    • 结构函数必定要有,假定没有,则主动向上查找,按照MRO次序,直到找到间断
# 承继的语法
#算法与数据结构 在python中,任何类都有一个一起的父类叫object
claspython装置教程s Person():
name = "NoName"
ag算法工程师学什么专业e = 18
__score = 0   # 考试成绩是隐秘,只需自己知道
_petname = "sec"   # 奶名,是维护的,子类可python为什么叫爬虫以用,但不能共用
def sleep(self):
print("Sleeping ... ...")
# 父类写在括号里
class Teachepython装置教程r(Person):
teacpython123her_id = "9527"
def make_test(self):
print("apython开发怎样学ttention")
t = Teacher()
print(t.name)算法与数据结构
print(t._petname)
# 私有拜访问题
# 揭穿拜访私有变量,报错
# print(t.__score)
t.sleep()
print(t.teacher_python自学行吗id)
t.make_test()
NoName
sec
Sleeping ... ...
9527
attention
# 子类和父类界说同一个称号变量,则优先运用子类自身
class Pers算法on():
name = "NoNa算法的概念me"
age = 18
__score = 0   # 考试成绩是隐秘,只需自己知道
_petname = "sec"   # 奶名,是维护的,子类能够用,但不能共用
def sleep(self):
print("Sleeping ... ...")
# 父类写在括号里
class Teacher(Person):
teacher_id = "9527"
name = "DaNa"
def make_test(self):
print("attention")
t = Teacpython是什么he算法统宗r
print(t.name)
DaNa
# 子类扩大父类功用
# 人有作业的函数,教python能够做什么作业师也有作业的函数,但教师算法开始知识点的作业需求讲课
class Person():
name = "NoName"
ag算法工程师需求把握什么e = 18
__python为什么叫爬虫scpython自学行吗ore = 0   # 考试成绩是隐秘,只需自己知道
_petname = "sec"算法开始知识点   # 奶名,是维护的,子类能够用,但不能共用
depython能够做什么作业f sleep(self):
print算法的概念("Sleeping ... ...")
def work(self):
print("make some money")
# 父类写在python自学行吗括号里
class Teacpython开发怎样学her(Person):
teacher_python开发怎样学id = "9527"
name = "DaNa"
def make_test(self):
print("at算法导论tention")
def work(selfPython):
# 扩大父类的功用只需求调用父类python开发怎样学相同的函数
# Person.work(self)
# 扩大父类的另一种方算法
# super代表得到父类
super().work(算法与数据结构)
self.make_test()
t = Teacherpython为什么叫爬虫()
t.work()
make some money
attention
# 结构函数的概念
class Dog():
# __init__便是结构函数
# 每次实例化的时分,第一个被主动的调用
# 因为首要作业是进行初始化,所以得名
def __算法工程师学什么专业init__(self):
print("I算法与数据结构 am init in dopython自学行吗g")
# 实例算法开始知识点化的时分,括号内的参数需求跟结构函数参数匹配
kaka = Dog()
I am init in dog
# 承继中的结构函数 - 1
class Animel():
pass
class P算法开始axingAni(Animel):
pass
class Dog(PaxingAni):
# __inPythonit__便是结构函数
#python开发怎样学 每次实例化的时分,第一个被主动的调用
# 因为首要作业是进行初始化,所以得名
def __init算法导论__(selpython能够做什么作业f):
print("I am init in dog")
# 实例化的时分算法是什么,主动调用了Dog的结构函数      
kaka = Dog()
I am init in dog
# 承继python培训班膏火一般多少中的结算法统宗构函数 - 2
class Animel():
def __init__(self):
print("Animel")
class Papython自学行吗xingAni(Anipython为什么叫爬虫mel):
def __init__(self):
print("Paxing Dongwu")
class Dog(PaxingAni):
# __init__便是结构函数
# 每次实例化的时分,第一个被主动的调python自学行吗
# 因为首要作业是进行初始化,所以得名
def __init__(self):
print("I am init inpython编程 dog")
# 实例化的时分,主动调用了Dog的结构函数     
# 因为python是什么找到了结构函数,则不再查找父类的结构函数
kakpython基础教程a = Dog()
# 猫没有写结构函数
clapython能够做什么作业ss Cat(PaxingAni):算法导论
pass
# 此刻应该主动调用结构函数,因为Cat没有结构函数,所以查找父类结构函数
# 在PaxingAni中查找到了结构函数,则间断向上查找
c = Cat()
I am init in dog
Paxing Dongwu
# 承继中的结构函数 - 3
class Animel()算法的概念:
d算法ef __init__(self):
print("Animel")
class PaxingAni(Animel):
def __init__(self, name):
print("Paxing Dongwu {0}".format(name))
cpython编程lass Dog(PaxingAni):
# __init__便是结构函数
# 每次实例化的时分python培训班膏火一般多少,第一个被主动的调用
# 因为首要作业是进行初始化,所以得名
def __init__(self):
print("I am init in dog")
# 实例化Dog时,查找到Dog的结构函数,参算法导论数匹配,不报错      
d = Dog()
class Cat(PaxingAni):
pass
# 此刻,因为Cat没有结构函数,则向上算法工程师查找
# 因为PaxingAni的结构函数需求两个参数,实例化python开发怎样学的时分给了一个,报错
c = Cat()
I am init in dog
------------------python能够做什么作业----------------------------------------算法开始知识点-----------------
TypeError                                 Traceback (most recent call last)
<ipython算法工程师学什么专业-input-29-35e195f59e34> in <module>
22 # 此刻,因为Cat没有结构函数,则向上查找python编程
23 # 因为PaxingAni的算法与数据结构结构函数需求两个参数,实例化的时分给了一个,报错
---> 24 c = Cat()
TypeError: __ini算法工程师t__() missing 1 required positional argumepython装置教程nt: 'name'
# 承继中的结构函数 - 4
classpython123 Animel():
def __init__(self):
print("Animel")
class PaxingAn算法是什么i(Animel):
pass
class Dog(Paxingpython开发怎样学Ani):
pass
# 实例python是什么化Dog时,查找到Dog的结构函数,参数匹配,不报错      
d = Dog()
class Cat(PaxingAni):
pass
# 此刻,因为Cat没有结构函数,则向上查找
# 因为Ppython能够做什么作业axingAni的结构算法与数据结构函数需求两个参数算法工程师需求把握什么,实例化的时分给了一个,报错
c = Cat()
Animel算法与数据结构
Animel
print(type(super))
help(算法统宗super)
<class 'type'>
Help on class spython开发怎样学uper in module builtins:
class s算法与数据结构uper算法与数据结构(object)
|  supython为什么叫爬虫per() -&gtpython自学行吗; same as super(__class__, <first argument>)
|  super(type)python装置教程 -> unbound super object
|  super(type, obj) ->算法工程师需求把握什么 bound super object; re算法开始知识点quires算法开始 isinstance(obj, type)
|  super(type, type2) -> bound super object; requires issubclass(type2, type)
|  Typical use to call a cooperative superclass method:
|  class C(B):
|      dpython能够做什么作业ef meth(self, arg):
|          super().meth(arg)
|  This works for class methods tpython编程oo:
|python装置教程  class C(B):
|      @classpython装置教程method
|      def cmeth(cls, arg):
|          super().cmeth(arg)
|
|  Me算法工程师需求把握什么thods defined here:
|
|  __get__(self, instance, owner, /)
|      Return an attribute of instance, which is of type owner.
|
|  __getattribute__python装置教程(self, name, /)
|      Retupython是什么rn getattr(self, name).
|
|  __init__(self, /, *args, **kwargs)
|      Inipython开发怎样学tialize self.  See help(type(self)算法工程师需求把握什么) for accurate signature.
|
|  __repr__(self, /)
|      Return repr(self).
|
|  -算法统宗---------------------------------算法导论------------------------------------
|  Static methods defined here:
|
|  __ne算法开始知识点w__(*args, **kwargs) from builtins.type
|      Create and return a new object.算法开始  See help(type) for accurate signature.
|
|  ----------------------------------------------------------------python是什么------
|  Data descriptors defined here:
|
|  __self__
|      the instance invoking super(); may be None
|
|  __self_class__
|      tpython是什么he type of the instance invoking super(); ma算法开始知识点y be None
|
|  __thisclass__
|      the class invoking super()