day25 面向对象继承 多态
一、上节回顾:
命名空间:
静态属性:属于类内部的命名空间
动态属性:属于类内部的命名空间
对象属性:属于对象的,在类内和self发生联系,在类内和对象名发生联系
可以查看静态属性的都有哪些:类名,对象名
可以调用类内的方法有哪些:类名.方法名(对象),对象.方法名()
类到对象之间没有联系,而对象到类之间有联系
对象在查找名的时候,会先在自己的空间里找,再到类的空间里找
组合:
将一个对象作为另一个类的对象的属性
作业:。。。。
二、新内容:
1、继承:模糊到具体
抽象:具体到模糊
先抽象后继承
继承有几种:单继承、多继承
2、继承的例子(猫和狗)
class Animal:def eat(self):print("eating")def drink(self):print("drinking")def sleep(self):print("sleeping") class Cat(Animal):def catch_mouse(self):print("yeah") class Dog(Animal):def watch_door(self):print("wangwang") kitty=Cat() kitty.eat() #eating snoopy=Dog() snoopy.eat() #eating snoopy.watch_door() #wangwang
猫和狗的继承的例子
3、
class Animal:def __init__(self,name,aggressivity,life_value):self.name=name #每个角色都有自己的昵称self.aggressivity=aggressivity #每个角色都有自己的攻击力self.life_value=life_value #每一个角色都有自己的生命值def eat(self):self.life_value+=10class Person(Animal):def __init__(self, name, aggressivity, life_value,money):Animal.__init__(self,name,aggressivity,life_value)self.money=moneydef attack(self,dog):dog.life_value-=self.aggressivitydef get_weapon(self,weapon_obj):if self.money>weapon_obj.price:self.money-=weapon_obj.price #花钱买武器self.weapon=weapon_obj #装备打狗棒self.aggressivity+=weapon_obj.aggr #人类的攻击力增加class Dog(Animal):def __init__(self, name, breed,aggressivity, life_value):Animal.__init__(self, name, aggressivity, life_value)self.breed=breed #每一只狗都有自己的品种:#派生属性:父类没有属性def bite(self,people): #派生方法:父类没有的方法people.life_value -= self.aggressivitysnoopy=Dog("太白","京巴",250,500) per=Person("taihei",100,234,100) print(snoopy.breed) #京巴 print(snoopy.name) #太白 snoopy.eat() print(snoopy.life_value) #510 snoopy.eat() print(snoopy.life_value) #520 Animal.eat(snoopy) #使用父类的方法 print(snoopy.life_value)#530
具有相同方法的类
4、总结:
5、新式类:
super 找到的是最近的父类(其他语言里面都有)
class Animal:def __init__(self,name,aggressivity,life_value):self.name=name #每个角色都有自己的昵称self.aggressivity=aggressivity #每个角色都有自己的攻击力self.life_value=life_value #每一个角色都有自己的生命值def eat(self):self.life_value+=10class Person(Animal):def __init__(self, name, aggressivity, life_value,money):# Animal.__init__(self,name,aggressivity,life_value)# super(Person,self).__init__(name, aggressivity, life_value)super().__init__(name,aggressivity,life_value)self.money=moneydef attack(self,dog):dog.life_value-=self.aggressivitydef get_weapon(self,weapon_obj):if self.money>weapon_obj.price:self.money-=weapon_obj.price #花钱买武器self.weapon=weapon_obj #装备打狗棒self.aggressivity+=weapon_obj.aggr #人类的攻击力增加class Dog(Animal):def __init__(self, name, breed,aggressivity, life_value):# Animal.__init__(self, name, aggressivity, life_value)super().__init__(name, aggressivity, life_value)self.breed=breed #每一只狗都有自己的品种:#派生属性:父类没有属性def bite(self,people): #派生方法:父类没有的方法people.life_value -= self.aggressivitydef eat(self):# Animal.eat(self) super().eat()print("dog is eating") snoopy=Dog("太白","京巴",250,500) super(Dog,snoopy).eat() #Animal.eat(snoopy) #新式类和经典类调用父类的方法 snoopy.eat() print(snoopy.life_value) #dog is eating 520
新式类和经典类调用父类的方法
6、总结:
用子类的对象,调用父类的方法
如果子类没有这个方法,直接使用父类的
如果子类有同名方法:
经典类 指名道姓 类名.方法名(子类对象)类内外一致
新式类 super方法 super(子类名,子类对象).方法名(),类内可以省略super 的参数
7、
class Foo:def __init__(self):self.func()def func(self):print("Foo.func") class Son(Foo):def func(self):print('Son.func') s=Son() #Son.func
面试题
8、钻石继承
1、经典类
2、新式类
3、总结 和例子
class D(object):passdef f(self):print("D") class B(D):passdef f(self):print('B') class C(D):passdef f(self):print("C") class A(B,C):passdef f(self):print('A') a=A() a.f() print(A.mro()) # [<class '__main__.A'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.D'>, <class 'object'>]
新式类钻石继承例子
4、
5、
6、总结
三、抽象类和接口类
继承——抽象类和接口类——是一种设计模式
其他语言的多态方法:
python 自带多态
今日内容总结:
转载于:https://www.cnblogs.com/number1994/p/8073081.html
day25 面向对象继承 多态相关推荐
- day08_面向对象继承多态Object
面向对象_day03 学习目标: 1. 熟练掌握面向对象---继承 2. 熟练使用访问权限修饰符 3. 熟练掌握super关键字 4. 熟练掌握Object类 5. 熟练掌握面向对象---多态特性 视 ...
- 3、面向对象-继承-多态
1.继承 子类可以继承父类的一切,一个子类只能有一个父类,一个父类可以有多个子类 //父类 class Ren{ public $name; public $sex; public $yuyan; f ...
- python多态的三种表现形式_python小结----面向对象的三大特征(封装,继承,多态)
面向对象的三大特征: 封装,继承,多态 面向对象的编程思想核心:高类聚,低耦合–程序的设计模式范畴 封装 什么是封装: 在面向对象编程的思想中,对代码进行高度封装,封装又叫包装 封装就是指将数据或者函 ...
- linux c 多态原理,看了所谓的面向对象中靠继承多态实现的所谓重用 哥笑了
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 这种重用不过还是引用别的类的函数或其它成员元素 我老听有些不懂编程却爱喷的人说什么面向对象代码可重用性"强" C写的代码 完全不能重用 ...
- python 参数类型的多态_【Python】面向对象:类与对象\封装\继承\多态
六.Python面向对象--类与对象\封装\继承\多态 1.什么是面向对象编程 1.1 程序设计的范式:程序可控,易于理解 1.2 抽象并建立对象模型 1.3 程序是不同对象相互调用的逻辑.每个对象在 ...
- 一个经典实例理解继承与多态原理与优点(附源码)---面向对象继承和多态性理解得不够深刻的同学请进...
一 引子 都说面向对象的4大支柱是抽象,封装,继承与多态.但是一些初涉编程的开发人员,体会不到继承与多态的妙用,本文就试以一个经典实例来诠释继承与多态的用武之地.本实例的需求来自<重构>一 ...
- swift面向对象之多态与继承
swift面向对象之多态与继承 1.多态 运行时多态 运行时多态的要点 1.要有继承关系的存在 2.子类要重写父类的方法 3.父类类型的引用指向子类实例 2.继承 1.继承的注意 继承可以用于类而不能 ...
- python--编写程序:实现乐手弹奏乐器,乐手可以弹奏不同的乐器而发出不同的声音------使用类的封装继承多态的问题/使用面向对象的思想,设计自定义类,描述出租车和家用轿车的信息
编写程序:实现乐手弹奏乐器,乐手可以弹奏不同的乐器而发出不同的声音 ------使用类的封装继承多态的问题 class Instrumnet():#乐器类def make_sound(self):pa ...
- -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口
java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型 也就是 ...
最新文章
- 【无标题】ubuntu20.04 开机引导后黑屏 光标闪现 无法进入图形桌面的解决方案_Denis.Zzzzzzzz?的博客-CSDN博客_ubuntu20黑屏光标闪烁
- leetcode 363. Max Sum of Rectangle No Larger Than K | 363. 矩形区域不超过 K 的最大数值和(前缀和,图文详解)
- Blockquotes,引用,html里面,经常用到的一个!
- ogg oracle 测试kafka_基于OGG的Oracle与Hadoop集群/kafka准实时同步
- python的kite下载安装及使用_Kite下载|Kite Python编程工具 V1.2020.1203.0 最新版下载 - 下载银行...
- java中userservice是什么,【图片】求助大神~~我在Reaml中注入userService对象启动tomcat就报错【java吧】_百度贴吧...
- HDU3068 回文串 Manacher算法
- MyBatis集成SpringMVC
- jquery_datatables
- Win7 64位系统安装SQL Server2005
- yb3防爆电机型号含义_YBX3防爆电机
- [CTBS]许可证过期之激活
- WordPress发布插件,WordPress定时采集伪原创发布插件
- office文档图标显示不正常
- 双向链表(double linked list)
- 厦大C语言上机 1360 算日期
- SMAA算法详解 - SMAASearchYUp(Down)
- Unreal Engine 4 —— Smear Frame效果的实现与分析
- 孙溟㠭篆刻《无有中无尽藏》
- 红帽linux预热剑,Linux系统下的剑动秋寒Bootloader详解
热门文章
- maven创建java,Maven创建Java项目
- 如何算三角形的cotangent
- 复杂背景下计算机视觉模型害虫识别的比较研究(像素语义分割网络SegNet)
- 深度学习简单线性训练
- 创建窗口,输入一个无符号整数,输出其对应的二进制数
- 算!力!羊!毛!5000核时计算资源终于开放使用了!
- 昔年浅谈电商服务业务应如何推广
- php监考,科学网—监考与被监考 - 张珑的博文
- python forward(10)什么意思-Python turtle.forward方法代码示例
- [列联相关] 列联系数计算及假设检验