python 面向对象专题(三):继承】的更多相关文章

Python面向对象中的继承.多态和封装 一.面向对象的三大特性 封装:把很多数据封装到⼀个对象中,把固定功能的代码封装到⼀个代码块, 函数,对象, 打包成模块. 这都属于封装思想. 继承:⼦类可以⾃动拥有⽗类中除了私有属性外的其他所有内容. 说⽩了, ⼉⼦可以随便⽤爹的东⻄. 多态: 同⼀个对象, 多种形态.在Python中处处是多态,因为在Python中一个变量可以是多种形态. 二.封装 封装,顾名思义,就是将某些东西给封装起来,以后想要使用的时候再去调用. 所以,在使用面向对象的封装特性时…
目录 Python面向对象03 /继承 1. 初识继承 2. 单继承 3. 多继承 4. 总结 1. 初识继承 概念:专业角度:如果B类继承A类,B类就称为子类,派生类,A类就称为父类,超类,基类 种类:单继承,多继承 面向对象的三大特征:继承,封装,多态 继承的优点: 减少重复的代码 增加类之间的耦合性(不宜多,宜精) 使代码更清晰,合理化 2. 单继承 定义:只有一个父类 执行父类的属性和方法: 1.类名执行父类的属性和方法 2.派生类对象执行父类的属性和方法 ​ 1.查询顺序:​ 单向不可…
在类中定义的函数属于绑定方法(bound method),因为用户定义的函数都有 __get__ 方法,所以依附到类上时,就相当于描述符.示例 20-13 演示了从 面向对象专题(九)示例 20-8 里定义的 Managed 类中读取 spam 方法.示例 20-13 方法是非覆盖型描述符 >>> obj = Managed() >>> obj.spam ➊ <bound method Managed.spam of <descriptorkinds.Man…
继承 介绍 继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力.继承即常说的is-a关系.子类继承父类的特征和行为,使得子类具有父类的各种属性和方法.或子类从父类继承方法,使得子类具有父类相同的行为. 例子: 比如可以先定义一个类叫车,车有以下属性:车体大小,颜色,方向盘,轮胎,而又由车这个类派生出轿车和卡车两个类,为轿车添加一个小后备箱,而为卡车添加一个大货箱. 继承所表达的就是一种对象类之间的相交关系,它使得某类对象可以继承另外一类对象的数据成员和成员方法.…
https://www.cnblogs.com/liubing8/p/11301344.html 目录 Python面向对象01 /面向对象初识.面向对象结构.类.self.实例化对象 1. 面向对象初识 2. 面向对象的结构 3. 从类名的角度研究类 3.1 类名操作类中的属性 3.2 类名调用类中的方法 4. 从对象的角度研究类 4.1 实例化一个对象发生的三件事 4.2 对象操作对象空间的属性 4.3 对象查看类中的属性 (注意:只能查看,不能更改) 4.4 对象查看类中的方法 5. se…
1.除了封装,Python面向对象还有继承这一功能,如下代码,这是简单的继承功能. class Animal: def chi(self): print(self.name+' 吃') def he(self): print(self.name + ' 喝') class Cat: def __init__(self, name): self.name = name def jiao(self): print('瞄') class Dog(Animal):#继承Animal这个父类,拥有父类的方…
目录 python面向对象07/异常处理 1. 异常错误分类 2. 什么是异常? 3. 异常处理 4. 为什么要有异常处理 5. 异常处理的两种方式 1.if判断 2.try 6. 常见异常种类 1. 异常错误分类 语法错误 if 2 > 1 print(222) dic = {'name'; 'alex'} # 错误使用; tu = (2, 3, 4'' 6 ) # 错误使用'' 逻辑错误 num = int(input('请输入数字')) # 输入的不是数字的时候就会报错 dic = {'n…
目录 Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 1. 元类type 2. 反射 3. 函数与类的区别 4. 特殊的双下方法 1. 元类type type:获取对象从属的类 Python中一切皆对象,类在某种意义上也是一个对象 Python中自己定义的类,以及大部分内置类,都是由type元类(构建类)实例化得来的 # type 获取对象从属于的类 print(type(A)) print(type(str)) print(type(dict)) type与ob…
https://www.cnblogs.com/liubing8/p/11325421.html 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubclass 1. 私有成员 2. 类方法 3. 静态方法 4. 属性 5. 内置函数 isinstance issubclass 6. 总结: 1. 私有成员 私有类的属性:在内部可以访问(本类内部方法中),类的外部不能访问 代码示例: # 在内部可以访问(本类内部方法中) class A: name…
https://www.cnblogs.com/liubing8/p/11321099.html 目录 Python面向对象04 /封装.多态.鸭子类型.类的约束.super 1. 封装 2. 多态 3. 鸭子类型 4. 类的约束 5. super的深度剖析 1. 封装 把一堆东西(代码,数据)放到一个地方(空间),并且可以使用,比如:函数,类 2. 多态 一个事物可以呈现多种形态 , 例如:水可以支持固态.液态.气态 Python默认支持多态(Java是强定义语言,Python是弱定义语言)…
继承的详解 https://www.cnblogs.com/poloyy/p/15216652.html 这篇文章讲的都是单继承,Python 中还有多继承 Python 多继承的背景 大部分面向对象的编程语言,都只支持单继承,即子类有且只能有一个父类 而 Python 却支持多继承(C++也支持多继承) 和单继承相比,多继承容易让代码逻辑复杂.思路换了一直备受争议,中小型项目中较少使用,后来的 Java.C#.PHP 取消了多继承 多继承带来的问题:多个父类中包含同名的类方法 Python 的…
前言 前两节讲解了Python面向对象的思想和Python类中各种变量的含义以及区别.肯定有小伙伴会问,类初始化时是否可以传入参数?如果有多个类中含有共同的函数方法,是否可以重复利用?本节就带着这些问题来继续深入类.Here We Go! 一.类的传参 1.1 带参数的初始化 还是以Doctor类为例,假如lisi是一位男性医生,现在要求在生成lisi这个对象时传入其性别.怎么办呢? 按照之前所学的,类似于函数的传参,肯定是: lisi = Doctor('male') 的确,类带参数的初始化就…
继承: 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类(基类或超类),新建的类是所继承的类的(派生类或子类) 人类和狗 有相同的属性, 提取了一个__init__方法,在这个方法里放一些共有的属性人类和狗 在相同的方法,提取了一个def func():方法,在这个方法里放一些共有的方法 单继承和多继承 class Par1: pass class Par2: pass class Sub1(Par1): pass class Sub2(Par1,Par2): pass…
python是支持多继承的,在设计类的继承关系时,通常,主线都是单一继承下来的.但是,如果需要“混入”额外的功能,通过多重继承就可以实现,这种设计通常称之为MixIn. 为了更好地看出继承关系,以MixIn结尾命令,例如:Runnable和Flyable就可以改为RunnableMixIn和FlyableMixIn. class Dog(Mammal, RunnableMixIn, CarnivorousMixIn): pass…
https://www.cnblogs.com/liubing8/p/11308127.html 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 2. 类与对象之间的关系 3. 类与类之间的关系 1. 类的空间问题 添加对象属性 # 在类的__init__可以添加,在类的方法也可以添加,在类的外部也可以添加 class Human: mind = '有思想的' def __init__(self, name, age): self.name…
######装饰器######装饰器的概念 - 装饰器的实现是函数里面嵌套函数;- 装饰器的本质是一个函数, 它可以让其他函数在不需要做任何代码改动的前提下增加额外的功能;- 装饰器需要传递一个函数, 返回值也是一个函数对象.######面向对象#######一.面向对象的基本概念 面向过程和面向对象,是两种不同的编程方式 对比面向过程的特点,可以更好的了解什么是面向对象  过程和函数(都是对一段功能的代码进行封装) 过程:是早期的一个编程概念  过程类似于函数,只能执行,但是没有返回值 函数:…
https://www.cnblogs.com/flashBoxer/p/9771797.html 实现了 __get__.__set__ 或 __delete__ 方法的类是描述符.描述符的用法是,创建一个实例,作为另一个类的类属性. 1 前言 描述符是对多个属性运用相同存取逻辑的一种方式.例如,DjangoORM 和 SQL Alchemy 等 ORM 中的字段类型是描述符,把数据库记录中字段里的数据与 Python 对象的属性对应起来. 描述符是实现了特定协议的类,这个协议包括 __get…
继承的实现原理 Python支持多继承 多继承的时候  属性查找的顺序 研究经典类和新式类在属性查找的不同 主要是形成菱形关系才有深度跟广度 广度优先 Python的继承原理  Python3的内置方法进行顺序查找 c3线性算法   F.mro() 子类重用父类的方式 super()专门引用父类的一些属性  是一个特殊的对象   参照mro列表 从当前类的父类往后找 依赖于继承   按照mro列表去找 示例 """ Description: Author:Nod Date:1…
继承的优点: 1.建造系统中的类,避免重复操作. 2.新类经常是基于已经存在的类,这样就可以提升代码的复用程度. 继承的特点: 1.在继承中基类的构造(__init__()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用.有别于C# 2.在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量.区别于在类中调用普通函数时并不需要带上self参数 3.Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找.(先在本类中查找调用的…
析构: def __del__(self): print("del..run...") r1 = Role("xx") del r1 结果打印del..run... 析构函数在实例被销毁的时候执行__del__ 做程序的收尾工作名字r1被删除后,垃圾回收机制会将对象清空就执行了__del__函数 继承1 对父类的功能进行扩展而无需重写 * 多级继承,一般三层父--子--孙--..* 多重继承 class Teacher(SchoolMember,School)用的不…
前言 在Python的类里面,所有属性和方法默认都是公共的:但Python也可以设置受保护.私有类型的变量or方法 受保护类型的变量.方法 一般称为:protected变量 #!/usr/bin/env python # -*- coding: utf-8 -*- class protected: _protected = "受保护变量" name = "test" def test(self): print("实例属性:", self._pro…
一. 私有属性和私有方法 应用场景 在实际开发中,对象的某些属性或方法可能只希望在对象的内部使用,而不希望在外部被访问到 私有属性 就是 对象 不希望公开的属性 (属性即类里面的变量) 私有方法 就是 方法 不希望公开的方法 定义方式 在定义属性或方法时,在属性名或者方法名前添加两个下划线,定义的就是私有属性或方法,只能在类里面用. class My: def test(self): self.__password = 123456 #私有属性 def say(self): print('pas…
一个子类可以继承父类的所有属性,不管是父类的数据属性还是方法. class Father(object): num = 0 def __init__(self): print "I'm Parent init" def foo(self): print "I'm Parent foo" class Children(Father): def __init__(self): super(Children, self).__init__() print "I'…
类的使用:实例化.属性引用 实例化 g1 = Garen('草丛伦1') # 实例化 g2 = Garen('草丛伦2') g3 = Garen('草丛伦3') 类的属性:变量和函数 print(Garen.camp) print(Garen.attack) print(Garen.__dict__) ``` 结果: {'module': 'main', 'camp': 'Demecia', 'n': 3, 'init': <function Garen.__init__ at 0x000000…
使用特性以保持简单 内置的 property 类创建的其实是覆盖型描述符,__set__ 方法和__get__ 方法都实现了,即便不定义设值方法也是如此. 特性的__set__ 方法默认抛出 AttributeError: can't set attribute,因此创建只读属性最简单的方式是使用特性,这能避免下一条所述的问题. 只读描述符必须有 __set__ 方法 如果使用描述符类实现只读属性,要记住,__get__ 和 __set__两个方法必须都定义,否则,实例的同名属性会遮盖描述符.…
前言 根据是否定义__set__ 方法,描述符可分为两大类. 实现 __set__ 方法的描述符属于覆盖型描述符,因为虽然描述符是类属性,但是实现 __set__ 方法的话,会覆盖对实例属性的赋值操作. 没有实现 __set__ 方法的描述符是非覆盖型描述符.如果设置了同名的实例属性,描述符会被遮盖,致使描述符无法处理那个实例的那个属性. 示例 20-8 descriptorkinds.py:几个简单的类,用于研究描述符的覆盖行为 ### 辅助函数,仅用于显示 ### def cls_name(…
本篇博客承接自Python 面向对象(上) 四. 继承,实现,依赖,关联,聚合,组合 Python面向对象--继承,实现,依赖,关联,聚合,组合 五. 特殊成员 Python面向对象--类的特殊成员 六. issubclass,type,isinstence各自的用法和区别 1. issubclass 语法: issubclass(class1, class2)参数: class1 和 class2 都是 类返回值: 返回 True 或 False -- 当class1是class2的家族成员时…
Python面向对象三要素-继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承概述 1>.基本概念 前面我们学习了Python的面向对象三要素之一,封装.今天我们来学习一下继承(Inheritance) 人类和猫类都继承自动物类. 个体继承自父类,继承了父类的一部分特征,但也可以有自己的个性. 再面向对象的世界中,从父类继承,就可以直接拥有父类的属性方法,这样可以减少代码,多复用.子类可以定义自己的属性和方法. 2>.看一个不用继承的例子…
面向对象编程 -- 封装.继承 面向对象编程三要素:封装.继承和多态.本文主要看和封装.继承相关的概念:在python中多态的概念比较模糊,本文不做讨论. 1 封装 封装:将数据和操作组装到一起,对外只暴露一些接口供类外部或子类访问,隐藏数据和操作的实现细节. 在其他面向对象语言,比如java中,属性访问控制一般有三种状态:private.protectd.public.python中没有什么东西是完全不可见的,没有任何机制可以强制性的隐藏数据.所以在python中不存在真正的只能在对象内部访问…
一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象.由于Python中一切都是类,所以也可以用来判断是否为字典,字符串,列表等类型 #应用一:判断是否为该类的对象 class Foo(object): pass obj = Foo() print(isinstance(obj, Foo)) #True #应用二 :判断数据类型 print(isinstance('hahah',str…