zoukankan      html  css  js  c++  java
  • 继承

    1 什么是继承
    继承一种新建类的方式,新建的类称之为子类/派生类,被继承的类称之为父类基类超类

    python中继承的特点:
    1.) 子类可以遗传/重用父类的属性2. )python中一个子类可以同时继承多个父类3.) 在继承背景下去说,python中的类分为两种:新式类,经典类
    新式类: 但凡继承了object的类Foo,以及该类的子类...都是新式类
    在python3中一个类即便是没有显式地继承任何基类,默认就会继承object类,即python3中所有的类都是新式类

    经典类:没有继承object的类,以及该类的子类...都是经典类
    python2中才区分新式类与经典类,在python2中一个类如果没有显式地继承任何类,也不会继承object

    2.为何要用继承?

    减少类与类之间代码冗余,增加代码的重用性。

    继承的使用:

    在Python3中的继承

    Python2中的继承:

    单继承情况下属性的访问顺序:对象》对象的类》类》父类......

    ps1:

    ps2:

    查找顺序必须是对象》对象的类》父类,并不是就近访问。父类中的self.f1()=obj.f1()
    
    class Foo:
        def f1(self):
            print('Foo.f1')
    
        def f2(self):
            print('Foo.f2')
            self.f1()   #obj.f1()
    
    class Bar(Foo):
        def f1(self):
            print('Bar.f1')
    
    obj=Bar()
    obj.f2()
    '''
    打印结果
    Foo.f2
    Bar.f1

    在子类派生出新的方法中重用父类功能的方式一:

    #指名道姓地引用某一个类中的函数
    #虽然子类(JiMeiStudent和JiMeiTeacher)调用了父类中的属性,但与继承无关,因为在两个子类中不加父类的名字,仍然可以访问父类内部的属性。在这里只是利用父类调用其内部的函数,并没有自动传值的效果。
    
    
    class JiMeiPeople:
        school='JiMei'
        def __init__(self,name,age,sex):  #老师和学生的共有属性,重用时都可以过来调
            self.name=name
            self.age=age
            self.sex=sex
        def choose_course(self):
            print('%s choosing course'%(self.name))
    class JiMeiStudent(JiMeiPeople):
        def __init__(self,name,age,sex,score=0):
            # 类访问自己类中的函数,必须自己传值。
            #类和对象访问属性或函数的方式为对象.属性/函数,类.属性/函数。
            JiMeiPeople.__init__(self,name,age,sex)
            self.score = score
    class JiMeiTeacher(JiMeiPeople):
        def __init__(self,name,age,sex,level):
            JiMeiPeople.__init__(self,name,age,sex)
            self.level=level
    objc=JiMeiStudent('李浩',17,'')
    print(objc.__dict__)
    objc1=JiMeiTeacher('周青',34,'male',10)
    print(objc1.__dict__)

    在多继承背景下的属性查找优先级:

  • 相关阅读:
    kafka_consumer3->spark_master
    为什么.NET感觉上比Java差一点
    学习Scala: 初学者应该了解的知识
    函数式编程 : 一个程序猿进化的故事
    Scala underscore的用途
    不变(Invariant), 协变(Covarinat), 逆变(Contravariant) : 一个程序猿进化的故事
    Scala Collection简介
    C# on Visual Studio Code
    我的Machine Learning学习之路
    Scala on Visual Studio Code
  • 原文地址:https://www.cnblogs.com/zhangchaocoming/p/11247552.html
Copyright © 2011-2022 走看看