继承的实现原理

Python支持多继承

多继承的时候  属性查找的顺序

研究经典类和新式类在属性查找的不同

主要是形成菱形关系才有深度跟广度

广度优先

Python的继承原理  Python3的内置方法进行顺序查找

c3线性算法   F.mro()

子类重用父类的方式

super()专门引用父类的一些属性  是一个特殊的对象   参照mro列表

从当前类的父类往后找

依赖于继承   按照mro列表去找

示例

 """
Description:
Author:Nod
Date:18-05-06
Record:
#---------------------------------v1-----------------------------------#
""" """ super()专门引用父类的一些属性 是一个特殊的对象 参照mro列表 从当前类的父类往后找
依赖于继承 """ class OldboyPeople:
def __init__(self,name,age,sex):
self.Name=name
self.Age=age
self.Sex=sex def tell_info(self):
print('info is %s-%s-%s'%(self.Name,self.Age,self.Sex)) class Student(OldboyPeople):
def __init__(self,name,age,sex,course):
# OldboyPeople.__init__(self,name,age,sex)
super().__init__(name,age,sex)
self.Course=course def tell_info(self):
print(' student info')
#OldboyPeople.tell_info(self)
super().tell_info() stu1=Student('nod','','F','Linux')
stu1.tell_info()

super方法的补充

super   先找自己类  再去foo  再去 bar

super从当前类为起始   再找到当前类的下一类   完全参照

mro列表

严格按照mro列表

 """
Description:super总结
Author:Nod
Date:18-05-05
Record:
#---------------------------------v1-----------------------------------#
""" class Foo:
def f2(self):
print('foo.f2') def f1(self):
print('Foo f1')
super().f2() # super的查找会按照mro列表查找 直接找到当前类的下一个;完全参照mro列表 class Bar:
def f2(self):
print('Bar f2') class Sub(Foo, Bar):
pass s = Sub()
# print(Sub.mro())
# #[<class '__main__.Sub'>, <class '__main__.Foo'>, <class '__main__.Bar'>, <class 'object'>]
s.f1()

Python 的多态与多态性

Python不限制输入,建议人们约定俗称的去遵守

记住那个谚语,只要长得像鸭子就是鸭子而不管它到底是不是鸭子;如果

一定去甄别什么是什么   什么是鸭子的话   那就是继承的关系  继承在一定程度上影响了代码的低耦合

造成了高耦合;

因为一旦修改了父类,可能会对子类有一定的影响

示例代码

 class Disk:
def wirte(self):
print('write to disk')
def read(self):
print('read from disk') class Process:
def write(self):
print('write to process') def read(self):
print(' read from process')

Python这么语言不会真正的限制你 虽然在有的地方会限制,但是不会真正的限制

Python 面向对象(三)的更多相关文章

  1. Python面向对象三要素-继承(Inheritance)

    Python面向对象三要素-继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承概述 1>.基本概念 前面我们学习了Python的面向对象三 ...

  2. Python面向对象三要素-封装(Encapsulation)

    Python面向对象三要素-封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.封装概述 将数据和操作组织到类中,即属性和方法 将数据隐藏起来,给 ...

  3. Python面向对象(三)

    一.绑定方法与非绑定方法 一.绑定方法:绑定给谁就应该由谁来调用,谁来调用就会将谁当作第一个参数传入 1.绑定给对象的方法:类中定义的函数默认就是绑定给对象的 2.绑定给类的方法:为类中定义的函数加上 ...

  4. Python面向对象三要素-多态

    Python面向对象3要素-多态 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  一.多态概述 OCP原则:多用“继承”,少修改. 继承的用途:在子类上实现对基类的增强,实现多态. ...

  5. Python 面向对象三(转载)

    来源:Mr.Seven www.cnblogs.com/wupeiqi/p/4766801.html 四.类的特殊成员 上文介绍了Python的类成员以及成员修饰符,从而了解到类中有字段.方法和属性三 ...

  6. python 面向对象三 访问权限 下划线 双下划线

    一.双下划线 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问. ...

  7. python 面向对象(三)类与类之间的关系 初始化方法一些类

    ###################总结################# 面试的时候 让写python一些特殊方法 __init__ 创建对象的时候初始化 __new__对象实例化调用第一个方法 ...

  8. python 面向对象(三)--继承和多态

    在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Supe ...

  9. Python 面向对象(三) 魔术方法

    __getitem__ 在对实例或对象使用索引访问时调用,self[key]__dir__ 收集当前模块的信息,包括继承自其它基类(包括object类)的属性和方法 __new 定义如何创建实例__i ...

  10. python面向对象<三>

    类属性.实例属性: class Tool(object): #属性(类属性)类对象(Tool) num = 0 #方法 def __init__(self,new_name): self.name = ...

随机推荐

  1. Flask实现异步非阻塞请求功能

    pip install gevent 关于gevent Gevent 是一个 Python 并发网络库,它使用了基于 libevent 事件循环的 greenlet 来提供一个高级同步 API.下面是 ...

  2. 用python处理html代码的转义与还原

    用python处理html代码的转义与还原   转义 escape: import cgi s = cgi.escape("""& < >" ...

  3. 如何解决ORA-28002 the password will expire within 7 days问题(密码快过期)

    1.问题描述: 今天登陆pl/sql工具时,提示 ORA-28002 the password will expire within 7 days 2.问题原因: oracle11g中默认在defau ...

  4. proxy Static方式

    package com.xk.spring.kp04_aop.proxy.s1_static; public interface IStudentService { public void save( ...

  5. (转)Web.config配置文件详解

    花了点时间整理了一下ASP.NET Web.config配置文件的基本使用方法.很适合新手参看,由于Web.config在使用很灵活,可以自定义一些节点.所以这里只介绍一些比较常用的节点. <? ...

  6. golang结构体、接口、反射

    struct结构体 struct用来自定义复杂数据结构,可以包含多个字段属性,可以嵌套; go中的struct类型理解为类,可以定义方法,和函数定义有些许区别; struct类型是值类型. struc ...

  7. 学习Hibenate随笔

    1.Hibenate是一个开放源代码的对象关系映射框架,它对JDBC进行了轻量级的对象封装,将pojo类与数据库表建立映射关系,是一个全自动orm框架,Hibenate可以自动生成sql语句,自动执行 ...

  8. Locust 集合点

    直接编写接口事务脚本对后台接口进行测试:有时测试需要让所有并发用户完成初始化后再进行压力测试,这就需要类似于LoadRunner中的集合点的概念,由于框架本身没有直接封装,有如下办法实现: from ...

  9. C#如何运行外部程序(打开可执行程序):ShellExcute和Process

    最近的任务用到C#来调用C++内核程序,也就是C++编译运行后生成的.exe文件.网搜了一下C#中运行外部程序大致有两种方法,在此稍作总结: (1)使用API函数ShellExcute 添加引用 us ...

  10. JavaBasic_12

    类 抽象:对象的共性 类:产生对象的模板(对于属性来讲,类规定有没有属性以及属性类型,具体的属性值因对象的不同而不同) 数据类型:数据集及基于这个数据集的操作 类:我们自定义类型(定义成员变量,基于数 ...