一、上节回顾:

  命名空间:

      静态属性:属于类内部的命名空间

      动态属性:属于类内部的命名空间

      对象属性:属于对象的,在类内和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 面向对象继承 多态相关推荐

  1. day08_面向对象继承多态Object

    面向对象_day03 学习目标: 1. 熟练掌握面向对象---继承 2. 熟练使用访问权限修饰符 3. 熟练掌握super关键字 4. 熟练掌握Object类 5. 熟练掌握面向对象---多态特性 视 ...

  2. 3、面向对象-继承-多态

    1.继承 子类可以继承父类的一切,一个子类只能有一个父类,一个父类可以有多个子类 //父类 class Ren{ public $name; public $sex; public $yuyan; f ...

  3. python多态的三种表现形式_python小结----面向对象的三大特征(封装,继承,多态)

    面向对象的三大特征: 封装,继承,多态 面向对象的编程思想核心:高类聚,低耦合–程序的设计模式范畴 封装 什么是封装: 在面向对象编程的思想中,对代码进行高度封装,封装又叫包装 封装就是指将数据或者函 ...

  4. linux c 多态原理,看了所谓的面向对象中靠继承多态实现的所谓重用 哥笑了

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 这种重用不过还是引用别的类的函数或其它成员元素 我老听有些不懂编程却爱喷的人说什么面向对象代码可重用性"强" C写的代码 完全不能重用 ...

  5. python 参数类型的多态_【Python】面向对象:类与对象\封装\继承\多态

    六.Python面向对象--类与对象\封装\继承\多态 1.什么是面向对象编程 1.1 程序设计的范式:程序可控,易于理解 1.2 抽象并建立对象模型 1.3 程序是不同对象相互调用的逻辑.每个对象在 ...

  6. 一个经典实例理解继承与多态原理与优点(附源码)---面向对象继承和多态性理解得不够深刻的同学请进...

    一 引子 都说面向对象的4大支柱是抽象,封装,继承与多态.但是一些初涉编程的开发人员,体会不到继承与多态的妙用,本文就试以一个经典实例来诠释继承与多态的用武之地.本实例的需求来自<重构>一 ...

  7. swift面向对象之多态与继承

    swift面向对象之多态与继承 1.多态 运行时多态 运行时多态的要点 1.要有继承关系的存在 2.子类要重写父类的方法 3.父类类型的引用指向子类实例 2.继承 1.继承的注意 继承可以用于类而不能 ...

  8. python--编写程序:实现乐手弹奏乐器,乐手可以弹奏不同的乐器而发出不同的声音------使用类的封装继承多态的问题/使用面向对象的思想,设计自定义类,描述出租车和家用轿车的信息

    编写程序:实现乐手弹奏乐器,乐手可以弹奏不同的乐器而发出不同的声音 ------使用类的封装继承多态的问题 class Instrumnet():#乐器类def make_sound(self):pa ...

  9. -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口

    java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型  也就是 ...

最新文章

  1. 【无标题】ubuntu20.04 开机引导后黑屏 光标闪现 无法进入图形桌面的解决方案_Denis.Zzzzzzzz?的博客-CSDN博客_ubuntu20黑屏光标闪烁
  2. leetcode 363. Max Sum of Rectangle No Larger Than K | 363. 矩形区域不超过 K 的最大数值和(前缀和,图文详解)
  3. Blockquotes,引用,html里面,经常用到的一个!
  4. ogg oracle 测试kafka_基于OGG的Oracle与Hadoop集群/kafka准实时同步
  5. python的kite下载安装及使用_Kite下载|Kite Python编程工具 V1.2020.1203.0 最新版下载 - 下载银行...
  6. java中userservice是什么,【图片】求助大神~~我在Reaml中注入userService对象启动tomcat就报错【java吧】_百度贴吧...
  7. HDU3068 回文串 Manacher算法
  8. MyBatis集成SpringMVC
  9. jquery_datatables
  10. Win7 64位系统安装SQL Server2005
  11. yb3防爆电机型号含义_YBX3防爆电机
  12. [CTBS]许可证过期之激活
  13. WordPress发布插件,WordPress定时采集伪原创发布插件
  14. office文档图标显示不正常
  15. 双向链表(double linked list)
  16. 厦大C语言上机 1360 算日期
  17. SMAA算法详解 - SMAASearchYUp(Down)
  18. Unreal Engine 4 —— Smear Frame效果的实现与分析
  19. 孙溟㠭篆刻《无有中无尽藏》
  20. 红帽linux预热剑,Linux系统下的剑动秋寒Bootloader详解

热门文章

  1. maven创建java,Maven创建Java项目
  2. 如何算三角形的cotangent
  3. 复杂背景下计算机视觉模型害虫识别的比较研究(像素语义分割网络SegNet)
  4. 深度学习简单线性训练
  5. 创建窗口,输入一个无符号整数,输出其对应的二进制数
  6. 算!力!羊!毛!5000核时计算资源终于开放使用了!
  7. 昔年浅谈电商服务业务应如何推广
  8. php监考,科学网—监考与被监考 - 张珑的博文
  9. python forward(10)什么意思-Python turtle.forward方法代码示例
  10. [列联相关] 列联系数计算及假设检验