首页 > 其他 > 详细

面向对象编程之继承

时间:2020-04-09 20:52:23      阅读:76      评论:0      收藏:0      [点我收藏+]

一、简介

  1、继承是类下建新类的方式,父类可以称为基类或超类,新类可以称为子类或派生类,子类可以继承父类的属性。

  2、父类可以被多个子类继承,子类亦可以继承多个父类。

  3、在python3中,最高祖类默认继承了内置的object类。

  4、在python2中,最高祖类没有默认继承,此时,该类及其子孙类都是经典类。除非明确最高祖类的父类为内置的object,那该类及其子孙类就都是新式类。

class GreatGrandfather:
    x = 111
class Grandfather(GreatGrandfather):
    pass
class Father(Grandfather):
    pass
class Son(Father):
    pass
son_obj_1 = Son()
print(GreatGrandfather.__bases__)  # python3 结果为 (<class ‘object‘>,)   python2 结果为 ()
print(son_obj_1.x)
print(Son.x)
print(Father.x)
print(Grandfather.x)
# 以上结果都为 111

二、多继承:某个子类继承了多个父类

  1、优点:子类可以使用每个父类的属性,提高了代码的利用率

  2、缺点:

    ①从思维逻辑上讲,这种子类自身属于某个“大类”的界定变得模糊。

    ②代码的可读性和拓展性变差,有可能会引发“菱形问题”。

  3、如果不可避免地需要使用多继承的方式,应该用mixins机制。

三、用继承解决代码冗余

class Employee:
    gender = male  # 子类共有数据属性
    def __init__(self, name, age):  # 子类实例化对象时共有属性
        self.name = name
        self.age = age
    def show_name(self):  # 子类共有功能
        print(这是员工{}.format(self.name))
class Worker(Employee):
    def work_time(self, time):  # Worker子类特有功能
        print({}今日工时为:{}.format(self.name, time))
class Manager(Employee):
    def __init__(self, name, age, skill):
        Employee.__init__(self, name, age)  # Manager子类实例化对象时,若父类已有,可直接引用
        self.skill = skill  # 父类没有的,再自行定义
    def work_target(self, target):  # Manager子类特有功能
        print({}本月指标为:{}.format(self.name, target))
worker_obj_1 = Worker(tom,18)
worker_obj_1.show_name()
worker_obj_1.work_time(8h)
manager_obj_1 = Manager(jan,20,dance)
manager_obj_1.show_name()
manager_obj_1.work_target(10亿)
# 结果为
‘‘‘
这是员工tom
tom今日工时为:8h
这是员工jan
jan本月指标为:10亿
‘‘‘

四、属性查找顺序

  1、单继承的情况:因为是直线关系,只需遵循辈分由小到大查找即可。

  2、多继承的情况:

    ①非菱形结构,经典类和新式类的查找顺序是一致的,都是按照从左到右的顺序,一个分支寻完再寻下一个分支,最后寻object。技术分享图片

    ②菱形结构:

      经典类:深度优先,查找第一个分支时就会先找到最顶头,再下个分支。技术分享图片

      新式类:广度优先,查找第一个分支时会截止到最顶头之前,待所有分支寻完,再寻最顶头,最后寻object。技术分享图片

    ③总结:多继承有时必须要用,但是继承结构要避免过于复杂,而且最好使用mixins机制。

 

面向对象编程之继承

原文:https://www.cnblogs.com/caoyu080202201/p/12669110.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!