大家都知道super是用来解决python钻石多重继承出现的基类重复调用的问题,这个就不赘述了,不了解的请点击

但是我发现还有个问题在于不是钻石继承时继承先后顺序的问题,也就是如果mixin与继承的某子类同时作为某类的父类时,其书写顺序对于super可能产生的不同影响:

假设有个情景是是打印租房信息,有一套房子中的一间婴儿房准备出租:

  1. class room:
  2. def __init__(self,area=120,usedfor='sleep'):
  3. self.area = area
  4. self.usedfor = usedfor
  5.  
  6. def display(self):
  7. print("this is my house")
  8.  
  9. class babyroom(room):
  10. def __init__(self,area=40,usedfor="son",wallcolor='green'):
  11. super().__init__(area,usedfor)
  12. self.wallcolr = wallcolor
  13.  
  14. def display(self):
  15. super().display()
  16. print("babyroom area:%s wallcollor:%s"%(self.area,self.wallcolr))
  17.  
  18. class rent:
  19. def __init__(self,money=1000):
  20. self.rentmoney = money
  21.  
  22. def display(self):
  23. print("for rent at the price of %s"%self.rentmoney)
  24.  
  25. class agent(babyroom,rent):
  26. # class agent(rent,babyroom):
  27. def display(self):
  28. super().display()
  29. print("rent house agent")
  30.  
  31. agent().display()
  32.  
  33. 在理想中我们希望所有类的都能够输出,也就是:
  34. this is my house
  35. babyroom area:40 wallcollor:green
  36. for rent at the price of 1000
  37. rent house agent
  38.  
  39. 但是实际输出并不是这样的,看到上面两种写法:
  40. 写法1的输出:
  41. this is my house
  42. babyroom area:40 wallcollor:green
  43. rent house agent
  44. 也就是说并没有调用rent类的display方法
  45.  
  46. 写法二的输出:
  47. for rent at the price of 1000
  48. rent house agent
  49. 也就是说babyroom以及room类的display方法都没有调用

需要补充的是两种写法中查看agent.__mro__会发现所有类都在,并没有缺失。

所以我认为在此存在传递中断的问题,当两个父类并不是兄弟类时,遇到super()并不会相互传递,二是直接选择走第一个的那条路线!!

这就提醒我们在mixin入的类里尽量不要使用和其他存在继承关系的类相同的方法名,即使都是表达的是打印信息到屏幕的方法

python3下的super()的更多相关文章

  1. 论python3下“多态”与“继承”中坑

    1.背景: 近日切换到python3后,发现python3在多态处理上,有一些比较有意思的情况,特别记载,供大家参考... 以廖老师的python3教程中的animal 和dog的继承一节的代码做例子 ...

  2. Python3中的super()函数详解

    关于Python3中的super()函数 我们都知道,在Python3中子类在继承父类的时候,当子类中的方法与父类中的方法重名时,子类中的方法会覆盖父类中的方法, 那么,如果我们想实现同时调用父类和子 ...

  3. Python3下map函数的显示问题

    map函数是Python里面比较重要的函数,设计灵感来自于函数式编程.Python官方文档中是这样解释map函数的: map(function, iterable, ...) Return an it ...

  4. python3下调用系统massagebox对话框

    #python3下调用系统massagebox对话框#先安装pwin32插件https://github.com/mhammond/pywin32/releases import win32apiim ...

  5. python3下获取主流浏览器和python的安装路径

    #coding=utf-8#python3下获取主流浏览器和python的安装路径#by dengpeiyou date:2018-07-09import winreg,os #取得浏览器的安装路径d ...

  6. 在python3下使用OpenCV 显示图像

    在Python3下用使用OpenCV比在C,C++里开发不止快捷一点点, 原型开发的时候蛮有用. 这里用的OpenCV 加载图片, 用的imshow画图 # -*- coding: utf-8 -*- ...

  7. python3下django连接mysql数据库

    1.安装pymysql pip install pymysql 有一点需要注意,有的系统(比如ubuntu16.04)同时安装了python2和python3,而比较新的django需要在python ...

  8. python3下安装aiohttp遇到过的那些坑

    python3下安装aiohttp遇到过的那些坑 最近需要用到aiohttp这个库,在安装过程中遇到很多坑.google.baidu后,依然没有找到合适的解决方案. 后来通过去python官方的PyP ...

  9. 在python3下用PIL做图像处理

    Python Imaging Library (PIL)是python下的图像处理模块,支持多种格式,并提供强大的图形与图像处理功能. 目前PIL的官方最新版本为1.1.7,支持的版本为python ...

随机推荐

  1. ural1057Amount of Degrees

    Description Create a code to determine the amount of integers, lying in the set [ X; Y] and being a ...

  2. Linux——搭建PHP开发环境第四步:composer

    原文链接:https://my.oschina.net/jiangbianwanghai/blog/473249 1.下载composer.phar [root#localhost opt]# cur ...

  3. [151116 记录] 使用Python3.5爬取豆瓣电影Top250

    这一段时间,一直在折腾Python爬虫.已有的文件记录显示,折腾爬虫大概个把月了吧.但是断断续续,一会儿鼓捣python.一会学习sql儿.一会调试OpenCV,结果什么都没学好.前几天,终于耐下心来 ...

  4. VmWare问题解决(网络变更后虚拟主机无法上网)

    安装 Vmware,并新建一个虚拟机后,当时做好配置(NAT模式)后,虚拟机能够正常上网. 然后将电脑带到另一个地理位置办公时,却无法上网. 本篇探讨问题的缘由和几种解决方式. 一.缘由解析 仅探讨上 ...

  5. Ncurses <一>

    前言: 最好的ncurses教程是 ncurses HOWTO,网上有中文版 编译ncurses引用的程序,需要加编译参数 -lncurses 并在.c文件中包含 ncurses.h头文件 1. 启动 ...

  6. java design

    http://www.austintek.com/mvc/ http://msdn.microsoft.com/zh-cn/magazine/cc163419.aspx http://www.croc ...

  7. Best Pratices——Make the Web Faster

    https://developers.google.com/speed/ PageSpeed Rules Optimizing caching — keeping your application's ...

  8. Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条

    Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条 异步任务相信大家应该不会陌生,那么本章内容MOMO将带领大家学习Unity中的一些异步任务.在同步加载游戏场景的时候通常会使用方法 Ap ...

  9. Highways

    poj1751:http://poj.org/problem?id=1751 题意:给你n个城市,每个城市的坐标给你,然后为了是每个城市都连通,需要在已经建了一些街道额基础上,再次建一些街道使其连通, ...

  10. GPIO软件模拟I2C

    /***************************************************************************** * * Filename: * ----- ...