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()

  • 相关阅读:
    iOS- static extern const
    App 性能分析
    迭代器和生成器
    软件工程之个人软件开发----起步
    myeclipse调式与属性显示
    hdu 6188
    uva10780 质因子分解
    云服务器端口号的几个操作
    Redis错误 : MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk.
    ubuntu系统安装宝塔面板Linux版
  • 原文地址:https://www.cnblogs.com/fxsm/p/11937153.html
Copyright © 2011-2022 走看看