day6面向对象--继承、多态
继承
继承:就像遗传一样,继承就是拥有父类的所有方法和属性,并且能够定义自己独特的属性和方法,对上面的类进行扩展。
可以什么都不写,直接继承父类,如下:
class People(object):
def __init__(self,name,age):
self.name = name
self.age = age
def eat(self):
print("%s is eating......" %self.name)
def sleep(self):
print("%s is sleeping....." %self.name)
def talk(self):
print("%s is talking......" %self.name)
class Man(People):
pass
class Woman(People):
pass
m1 = Man("chenronghua",)
m1.eat()
运行结果如下:
chenronghua is eating......
上面代码可以看出,首先定义了一个People的类,还有一个Man(People)类直接继承People类。
下面,我们在上面的Man()类中定义一个单独的方法,如下:
class People(object):
def __init__(self,name,age):
self.name = name
self.age = age
def eat(self):
print("%s is eating......" %self.name)
def sleep(self):
print("%s is sleeping....." %self.name)
def talk(self):
print("%s is talking......" %self.name)
class Man(People):
def piao(self):
print("%s is piaoing......20s......" %self.name)
class Woman(People):
pass
m1 = Man("chenronghua",)
m1.piao()
运行结果如下:
chenronghua is piaoing......20s......
上面,我们给Man()增加了新的方法,可以看出,能够执行。
下面,我们来重写父类。扩展新功能,子类并且要具有父类的所有方法与属性。在子类中调用父类:
class People(object):
def __init__(self,name,age):
self.name = name
self.age = age
def eat(self):
print("%s is eating......" %self.name)
def sleep(self):
print("%s is sleeping....." %self.name)
def talk(self):
print("%s is talking......" %self.name)
class Man(People):
def piao(self):
print("%s is piaoing......20s......" %self.name)
def sleep(self):
People.sleep(self)
print("man is sleeping......")
class Woman(People):
pass
m1 = Man("chenronghua",)
m1.sleep()
上面代码中,子类调用了父类中的方法,要明白本质,创建实例的本质是增加了一个新的内存变量。
不同类中方法的调用:
class People(object):
def __init__(self,name,age):
self.name = name
self.age = age
def eat(self):
print("%s is eating......" %self.name)
def sleep(self):
print("%s is sleeping....." %self.name)
def talk(self):
print("%s is talking......" %self.name)
class Man(People):
def piao(self):
print("%s is piaoing......20s......" %self.name)
def sleep(self):
People.sleep(self)
print("man is sleeping......")
class Woman(People):
def get_birth(self):
print("%s is borning a bady......" %self.name)
# m1 = Man("chenronghua",)
# m1.sleep()
w1 = Woman("chenronghua",)
w1.get_birth()
w1.piao()
运行如下:
chenronghua is borning a bady......
Traceback (most recent call last):
File "/home/zhuzhu/第六天/inherit.py", line 34, in <module>
w1.piao()
AttributeError: 'Woman' object has no attribute 'piao'
从上面可以看出,继承同一个父类的子类是方法是不能相互调用的。
class People(object):
def __init__(self,name,age):
self.name = name
self.age = age
def eat(self):
print("%s is eating......" %self.name)
def sleep(self):
print("%s is sleeping....." %self.name)
def talk(self):
print("%s is talking......" %self.name)
class Man(People):
def __init__(self,name,age,money): #给男的单独增加属性
People.__init__(self,name,age)
self.money = money
print("%s 刚出生就有%s元" %(self.name,self.money)) #构造函数的时候就会执行代码
def piao(self):
print("%s is piaoing......20s......" %self.name)
def sleep(self):
People.sleep(self)
print("man is sleeping......")
class Woman(People):
def get_birth(self):
print("%s is borning a bady......" %self.name)
m1 = Man("chenronghua",,)
m1.sleep()
运行结果如下:
chenronghua 刚出生就有100元
chenronghua is sleeping.....
man is sleeping.....
从上面代码可以看出,__init__(self,name,age,money)类的初始化,People.__init__(self,name,age)继承,继承父类的属性,普通的继承。
下面来看看新式类中的继承。
class People(object):
def __init__(self,name,age):
self.name = name
self.age = age
def eat(self):
print("%s is eating......" %self.name)
def sleep(self):
print("%s is sleeping....." %self.name)
def talk(self):
print("%s is talking......" %self.name)
class Man(People):
def __init__(self,name,age,money): #给男的单独增加属性
super(Man,self).__init__(name,age)
self.money = money
print("%s 刚出生就有%s元" %(self.name,self.money)) #构造函数的时候就会执行代码
def piao(self):
print("%s is piaoing......20s......" %self.name)
def sleep(self):
People.sleep(self)
print("man is sleeping......")
class Woman(People):
def get_birth(self):
print("%s is borning a bady......" %self.name)
m1 = Man("chenronghua",,)
m1.sleep()
新式类是用super()函数来实现继承的,super(Man,self).__init__(name,age)实现继承,新式类和旧式类的差别主要体现在多继承上面。
下面看下类的多继承问题:
class People(object):
def __init__(self,name,age):
self.name = name
self.age = age
def eat(self):
print("%s is eating......" %self.name)
def sleep(self):
print("%s is sleeping....." %self.name)
def talk(self):
print("%s is talking......" %self.name)
class Relation(object):
def make_friends(self,obj):
print("%s is making friends with %s" %(self.name,obj.name))
class Man(People,Relation):
def __init__(self,name,age,money): #给男的单独增加属性
super(Man,self).__init__(name,age) #超级父类,Man继承父类name,age
self.money = money
print("%s 刚出生就有%s元" %(self.name,self.money)) #构造函数的时候就会执行代码
def piao(self):
print("%s is piaoing......20s......" %self.name)
def sleep(self):
People.sleep(self)
print("man is sleeping......")
class Woman(People,Relation):
def get_birth(self):
print("%s is borning a bady......" %self.name)
w1 = Woman("ruhua",)
m1 = Man("chenronghua",,)
m1.make_friends(w1) #把w1实例当做参数传给make_friends,等价于obj》w1,obj.name》w1.name
上面代码中,当子类继承多个父类的时候,即便其中一个父类没有实例化,也能调用另外一个父类的方法和属性。通过子类把两个父类关联到一起。
多态
一个接口,多个重用
day6面向对象--继承、多态的更多相关文章
- day25 面向对象继承,多态,
这两天所学的都是面向对象,后面还有几天也是它,面向对象主要有三个大的模块,封装,继承,多态,(组合),昨天主要讲了面向对象的命名空间,还有组合的用法,今天是讲的继承还有继承里面所包括的钻石继承,以及多 ...
- 07JAVA基础面向对象-继承/多态
一.继承 1.概念 子类的共性 重用现有类并在此基础上进行扩展 public class 子类 extends 父类{} 2.继承中的成员访问 成员变量 成员方法 局部->本类中成员变量-> ...
- java面向对象(封装-继承-多态)
框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...
- -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态 包 访问权限 内部类 匿名内部类 == 与 equal
java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型 也就是 ...
- php面向对象 封装继承多态 接口、重载、抽象类、最终类总结
1.面向对象 封装继承多态 接口.重载.抽象类.最终类 面向对象 封装继承多态 首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一 ...
- Python入门之面向对象的多态和继承
本章内容 Python面向对象的多态和继承对比 ========================================= 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的 ...
- Java基础——面向对象(封装——继承——多态 )
对象 对象: 是类的实例(实现世界中 真 实存在的一切事物 可以称为对象) 类: 类是对象的抽象描述 步骤: 1.定义一个类 (用于 描述人:) ( * 人:有特征和行为) 2.根据类 创建对象 -- ...
- Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)
Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以 ...
- python面向对象(封装,继承,多态)
python面向对象(封装,继承,多态) 学习完本篇,你将会深入掌握 如何封装一个优雅的借口 python是如何实现继承 python的多态 封装 含义: 1.把对象的属性和方法结合成一个独立的单位, ...
随机推荐
- python 获取本机 IP
原文 通过 UDP 获取本机 IP,目前见过最优雅的方法 这个方法是目前见过最优雅获取本机服务器的IP方法了.没有任何的依赖,也没有去猜测机器上的网络设备信息. 而且是利用 UDP 协议来实现的,生成 ...
- 路径名导致的异常:javax.imageio.IIOException: Can't read input file!
背景: 写了一个测试程序,目的是读取本地的图片,为其打上水印图片.在使用过程中总会遇到:javax.imageio.IIOException: Can't read input file!的错误,最开 ...
- 无法将网络更改为桥接状态 没有VMent0
本文主要分享 VMware 10.0.2 报错信息:无法将网络更改为桥接状态的解决经验 工具/原料 VMware 10.0.2 方法/步骤 1 故障现象,导致虚拟机无法正常上网 设备管理器 ...
- bzoj千题计划170:bzoj1968: [Ahoi2005]COMMON 约数研究
http://www.lydsy.com/JudgeOnline/problem.php?id=1968 换个角度 一个数可以成为几个数的约数 #include<cstdio> #incl ...
- Storm实现实时大数据分析
当今世界,公司的日常运营经常会生成TB级别的数据.数据来源囊括了互联网装置可以捕获的任何类型数据,网站.社交媒体.交易型商业数据以及其它商业环境中创建的数据.考虑到数据的生成量,实时处理成为了许多机构 ...
- nginx.conf 基础配置
### 全局块开始### #配置允许运行nginx服务器的用户和用户组 user nobody; #配置允许nginx进程生成的worker process 数 worker_processes 1; ...
- 计算广告学-多点归因模型(Multi-Touch Attribution Model)
计算广告学中的一个重要的问题是, 如果用户产生了一次转化(conversion, 比如购买, 注册等), 且该用户在转化之前看过大量不同频道(比如搜索, 展示, 社交等等)的广告, 那么我们如何确定是 ...
- SVN自动更新-win平台
把项目给外包做,他们天天整个ftp传来传去,上传一次还要到处翻View和Controller,还有漏传的情况,简直low到不行.看不下去了,就准备整个svn.虽然svn解决了上传的问题,但是自动发布还 ...
- 20155225 2016-2017-2 《Java程序设计》第七周学习总结
20155225 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 java提供的时间处理API 认识时间与日期,时间日期处理不是我想象中那么简单的问题,涉及地 ...
- HTML5之2D物理引擎 Box2D for javascript Games 系列 第二部分
这是系列第二部分,之前部分在本博客中找 源码demo存放在https://github.com/willian12345/Box2D-for-Javascript-Games 向世界添加刚体 刚体(B ...