zoukankan      html  css  js  c++  java
  • 继承

    什么是继承
    继承是一种建类的方式,新建的类称之为子类或派生类,继承的父类称之为基类或超类
    -在Python中一个字累可以继承多个父类
    -其他语言一个子类只可以继承一个父类
    继承的作用是:减少代码的冗余

    如何实现继承,
    确认谁是子类,谁是父类,
    在定义子类时,引用父类名字在括号内

    确认谁是父类
    先抽象,再继承
    -抽取对象之间相似的部分,总结出类
    -抽取类之间相似的部分,总结出父类

    注意程序的执行时自上而下的,父类必须定义在子类的上方
    -在继承的背景下,对象属性的查找顺序
    1,先从对象自己本身查找
    2,对象没有,再在对象子类名称空间查找
    3,子类没有,再在父类名称空间查找,父类没有则报错

    派生:
    指的是子类继承父类的属性与方法,并且派生出自己独有的属性
    如果子类的属性或方法与父类的相同,优先用子类

    子类继承父类属性与方法,并且重用父类的属性与方法,需要重新写__init__内容,造成代码冗余

    解决办法
    1,利用直接应用父类名,接受参数传参
    2,利用supper函数,直接调用得到一个对象指向父类的名称空间

    注意:不要混合使用

    经典类与新式类:
    新式类:
    1,凡是继承object的类或子孙类都是新式类
    2,在python3中所有的类都是新式类

    经典类

    1,在python2中才会有经典类与新式类之分
    2,在python2中凡是没有继承object的都是经典类

    调用mro返回的是一个继承序列:
    super 的继承顺序严格遵循mro继承序列

    在python3中提供了一个查找新式类查找顺序的内置方法
    mro()会把当前类的继承关系列出来

    多继承情况下造成“钻石继承”
    mro的查找顺序是:
    -新式类:
    -广度优先
    -经典类:
    -深度优先

    """

    class Oldteacher:

    school = 'oldboy'

    country = 'china'

    def init(self, name, sex, age):

    self.name = name

    self.sex = sex

    self.age = age

    def change_source(self):

    print('更改分数')

    class Oldstudent:

    school = 'oldboy'

    country = 'china'

    def init(self, name, sex, age):

    self.name = name

    self.sex = sex

    self.age = age

    def choice_class(self):

    print('选择课程')

    class OldPeople:
    school='school'
    country ='china'
    def init(self,name,sex,age):
    self.name= name
    self.sex = sex
    self.age = age
    class Oldteacher(OldPeople):
    def init(self,name,sex,age,sal):
    # self.name= name
    # self.sex = sex
    # self.age = age
    OldPeople.init(self,name,sex,age)
    self.sal = sal
    def change_source(self):
    print('更改分数')
    class Oldstudent(OldPeople):
    def init(self,name,sex,age,like):
    # self.name= name
    # self.sex = sex
    # self.age = age
    super().init(name,sex,age)
    self.like = like
    def choice_class(self):
    print('选择课程')

    stu1 =Oldstudent('张三','男',18)
    print(stu1.country)

    class foo:
    def f1(self):
    print('foo,f1')
    def f2(self):
    print('foo,f2')
    self.f1()
    class goo(foo):
    def f1(self):
    print('goo ,f1')
    def func(self):
    print('goo,func')
    cae_obj=goo()
    print('11')
    cae_obj.f2()

  • 相关阅读:
    Android的数据存储
    Servlet第一天
    JavaScript高级程序设计读书笔记(3)
    Interesting Papers on Face Recognition
    Researchers Study Ear Biometrics
    IIS 发生意外错误 0x8ffe2740
    Father of fractal geometry, Benoit Mandelbrot has passed away
    Computer vision scientist David Mumford wins National Medal of Science
    Pattern Recognition Review Papers
    盒模型bug的解决方法
  • 原文地址:https://www.cnblogs.com/fxsm/p/11937153.html
Copyright © 2011-2022 走看看