Python 面向对象(三)
继承的实现原理
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 面向对象(三)的更多相关文章
- Python面向对象三要素-继承(Inheritance)
Python面向对象三要素-继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承概述 1>.基本概念 前面我们学习了Python的面向对象三 ...
- Python面向对象三要素-封装(Encapsulation)
Python面向对象三要素-封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.封装概述 将数据和操作组织到类中,即属性和方法 将数据隐藏起来,给 ...
- Python面向对象(三)
一.绑定方法与非绑定方法 一.绑定方法:绑定给谁就应该由谁来调用,谁来调用就会将谁当作第一个参数传入 1.绑定给对象的方法:类中定义的函数默认就是绑定给对象的 2.绑定给类的方法:为类中定义的函数加上 ...
- Python面向对象三要素-多态
Python面向对象3要素-多态 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 OCP原则:多用“继承”,少修改. 继承的用途:在子类上实现对基类的增强,实现多态. ...
- Python 面向对象三(转载)
来源:Mr.Seven www.cnblogs.com/wupeiqi/p/4766801.html 四.类的特殊成员 上文介绍了Python的类成员以及成员修饰符,从而了解到类中有字段.方法和属性三 ...
- python 面向对象三 访问权限 下划线 双下划线
一.双下划线 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问. ...
- python 面向对象(三)类与类之间的关系 初始化方法一些类
###################总结################# 面试的时候 让写python一些特殊方法 __init__ 创建对象的时候初始化 __new__对象实例化调用第一个方法 ...
- python 面向对象(三)--继承和多态
在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Supe ...
- Python 面向对象(三) 魔术方法
__getitem__ 在对实例或对象使用索引访问时调用,self[key]__dir__ 收集当前模块的信息,包括继承自其它基类(包括object类)的属性和方法 __new 定义如何创建实例__i ...
- python面向对象<三>
类属性.实例属性: class Tool(object): #属性(类属性)类对象(Tool) num = 0 #方法 def __init__(self,new_name): self.name = ...
随机推荐
- OAF 抛出html消息
throw new oracle.apps.fnd.framework.OAException("<html><p style=\"color:#FF0000; ...
- vmware 安装 centos7 记录笔记
1, 安装centos 7, 到阿里云镜像下载centos 7 1.虚拟机的创建: 打开安装好的VMware (如果大家安装的VMware是英文版的也没关系,对号入座即可),选择“文件--->新 ...
- python之模块定义、导入、优化详解
一.模块 1.模块的定义 模块是一组包含了一组功能的python文件,比如test.py,模块名为test,可以通过import test进行调用.模块可以分为以下四个通用类别 1 使用python编 ...
- vue教程自学笔记(一)
一.介绍 1.指令 指令带有前缀v-,以表示它们是Vue提供的特殊特性.eg:v-bind,v-if,v-for,v-on,v-model(实现表单输入和应用状态之间的双线绑定) v-bind跟v-o ...
- VSTO:使用C#开发Excel、Word【15】
使用文档属性DocumentProperties集合和DocumentProperty对象位于Microsoft Office 11.0 Object Library(office.dll)中,该对象 ...
- Python语言:下载上证股票数据程序
from urllib.request import urlretrieve f = open('SHA.csv', 'r')for line in f: data = line.split(',') ...
- Java面试(一) -- 基础部分(1)
1 .一个".java" 源文件中是否可以包括多个类(不是内部类)?有什么限制?答:可以有多个类,但只能有一个 public 的类,并且 public 的类名必须与文件名相一致.. ...
- Oracle物化视图梳理
--物化视图可以分为三种类型:* 包含聚集的物化视图* 只包含连接的物化视图* 嵌套物化视图三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大. --物化视图创建方式(Build M ...
- guava-retrying 源码解析(等待策略详解)
一.等待策略相关类: 1.等待策略接口:WaitStrategy接口 该接口只有一个方法,就是返回尝试失败之后,下一次尝试之前的等待时间.long computeSleepTime(Attempt f ...
- nodejs -- fs模块 ---> readFile 函数 1) fs.readFile(filename, "binary", function(error, file) 2) response.write(file, "binary");
一:代码: 1.1 入口文件: index.js var server = require('./server'); var router = require("./router" ...