python之7-2类的继承与多态
类的继承的意思就如同父子关系一样,这个儿子继承了父亲的一切,但是在某些地方(属性)相同的时候,儿子的属性大于老子的属性(覆盖),最底层类,总会继承最接近它的那个类的属性init
类的多态总是和继承相连的,没有继承,就没有多态一说.一个子类的实例,它即属于这个子类,也属于父类,比如:父亲A和儿子B,儿子B即属于儿子类,也属于人类,但是它不属于父亲类
多态是面向对象语言的一个基本特性,多态意味着变量并不知道引用的对象是什么,根据引用对象的不同表现不同的行为方式。在处理多态对象时,只需要关注它的接口即可
多态的实际用法是构建一个类外函数 ,函数的参数为指向类对象的变量,然后函数体返回这个变量(类对象)的方法。这样子,调用函数就可以根据实例类型,来返回对应的方法。
例如下面这个例子:
#!/usr/bin/env python
# coding=utf-8
#定义一个父类人类
class humen(object):
def __init__(self,name,eye=2,age=None):
self.name = name
self.eye = eye
self.age = age
def action(self):
print "%s有%u个eye,这个人已经有%u岁了" %(self.name,self.eye,self.age)
class father(humen):
def action(self):
print "我是%s,是一名父亲" %self.name
class son(father):
def action(self):
print "我是%s,是一名的儿子" %self.name
one = humen("one",2,20)
tom = father('tom')
david = son('david')
def actiont(hm):
return hm.action()
actiont(one)
actiont(tom)
actiont(david)
aaa103439@aaa103439-pc:~/桌面/python$ python test7_类_多态.py
one有2个eye,这个人已经有20岁了
我是tom,是一名父亲
我是david,是一名的儿子
- 如果想要实现在儿子实例中输出父亲实例的属性,则可以做如下修改:
#!/usr/bin/env python
# coding=utf-8
#定义一个父类人类
class humen(object):
def __init__(self,name,eye=2,age=None):
self.name = name
self.eye = eye
self.age = age
def action(self):
print "%s有%u个eye,这个人已经有%u岁了" %(self.name,self.eye,self.age)
class father(humen):
namef = []
def __init__(self,name):
self.name = name
father.namef = name
def action(self):
print "我是%s,是一名父亲" %self.name
class son(humen):
def action(self):
print "我是%s,是%s的儿子" %(self.name,father.namef)
one = humen("one",2,20)
tom = father('tom')
david = son('david')
bob = father('bob')
micheal = son('micheal')
def actiont(hm):
return hm.action()
actiont(one)
actiont(tom)
actiont(david)
actiont(bob)
actiont(micheal)
aaa103439@aaa103439-pc:~/桌面/python$ python test7_类_多态.py
one有2个eye,这个人已经有20岁了
我是tom,是一名父亲
我是david,是bob的儿子
我是bob,是一名父亲
我是micheal,是bob的儿子
- 注释:这里将son的父类替换为了human,目的就是在son类实例调用的父类的时候,避免了father类中列表namef的最后一个元素追加进son类实例的元素
python之7-2类的继承与多态的更多相关文章
- Python 基础之面向对象类的继承与多态
一.继承 定义:一个类除了拥有自身的属性方法之外,还拥有另外一个类的属性和方法继承: 1.单继承 2.多继承子类: 一个类继承了另外一个类,那么这个类是子类(衍生类)父类:一个类继承了另外一个类,被继 ...
- Python学习(七)面向对象 ——继承和多态
Python 类的继承和多态 Python 类的继承 在OOP(Object Oriented Programming)程序设计中,当我们定义一个class的时候,可以从某个现有的class 继承,新 ...
- 【JAVA零基础入门系列】Day13 Java类的继承与多态
继承是类的一个很重要的特性,什么?你连继承都不知道?你是想气死爸爸好继承爸爸的遗产吗?(滑稽) 开个玩笑,这里的继承跟我们现实生活的中继承还是有很大区别的,一个类可以继承另一个类,继承的内容包括属性跟 ...
- 【游戏开发】在Lua中实现面向对象特性——模拟类、继承、多态
一.简介 Lua是一门非常强大.非常灵活的脚本语言,自它从发明以来,无数的游戏使用了Lua作为开发语言.但是作为一款脚本语言,Lua也有着自己的不足,那就是它本身并没有提供面向对象的特性,而游戏开发是 ...
- 【转载】【游戏开发】在Lua中实现面向对象特性——模拟类、继承、多态
[游戏开发]在Lua中实现面向对象特性——模拟类.继承.多态 阅读目录 一.简介 二.前提知识 三.Lua中实现类.继承.多态 四.总结 回到顶部 一.简介 Lua是一门非常强大.非常灵活的脚本语 ...
- python类的继承和多态
现在属于是老年人的脑子,东西写着写着就忘了,东西记着记着就不知道了.之前学C++的时候就把类.对象这块弄得乱七八糟,现在是因为很想玩python,所以就看看python的类和对象. 就像说的,类有三个 ...
- python 基础 5.2 类的继承
一. 类的继承 继承,顾名思议就知道是它的意思,举个例子说明,你现在有一个现有的A类,现在需要写一个B类,但是B类是A类的特殊版,我们就可以使用继承,B类继承A类时,B类会自动获得A类的所有属性和方法 ...
- python类的继承和多态,获取对象信息
继承 类的继承机制使得子类可以继承父类中定义的方法,拥有父类的财产,比如有一个Animal的类作为父类,它有一个eat方法: class Animal(object): def __init__(se ...
- 【我要学python】面对对象编程之继承和多态
class animal(object): def run(): print('animal is running...') class dog(animal): def run(self): pri ...
随机推荐
- SRM 392(1-250pt)
DIV1 250pt 题意:给两个各含有一个*号的字符串s1和s2,可以用一个任意字符串代替*号(注意是串,不是只能用单个字符代替,也可以为用空串代替),问能否将s1和s2变为相同的字符串.如果能输出 ...
- angularJS 服务三
路由 一 简介 1.路由机制 为了实现无刷新的视图切换,我们通常会用ajax请求从后台取数据,然后套上HTML模板渲染在页面上,然而ajax的一个致命缺点就是导致浏览器后退按钮失效,尽管我们可以在页面 ...
- Java model 对象处理
public class BaseFlowBo { /** * 流量 */ private String flow; /** * Pv */ private String pv; /** * CTR ...
- Android使用Linux mount获取SdCard存储文件夹
Android的智能手机各不同样.如今非常多Android智能手机都是自带存储,有的还带有扩展内存的Sdcard卡槽. 在Android开发中,非常多时候依据Android提供的获取SdCard存储方 ...
- Qt深入:不能不知道的Type、Attribute和Flags
Qter高手与新手的区别在于:知道还是不知道 Qt不是开发语言,所以无所谓谁厉害.但使用他的Qter却有着差异,也许是面向对象语言本身的.或者实际经验上的.而对于Qt本身来说,高手与新手最显著的差异在 ...
- Using SSL Certificates with HAProxy--reference
原文地址:http://serversforhackers.com/editions/2014/07/29/haproxy-ssl-termation-pass-through/ Overview I ...
- 自定义filter包
在有些时候,你可能需要以你的所有项目进行全局的过滤. 因为你的项目可以设计到互相的依赖和调用 . 修改在tomcat下的conf下的web.xml文件.和在原来的web-inif下的修改一样,添加fi ...
- ASP.NET-FineUI开发实践-14
以前写过一个表格自动补全,改下,就出现了部分级联修改.测试版本4.1.1 共享下JS,ext-part2.js 后台再来个得到数据的方法就可以了. 1.方法还是删除+插入,主要在 i ...
- OD: Kernel Exploit - 2 Programming
本节接前方,对 exploitme.sys 进行利用. exploitme.sys 存在任意地址写任意内容的内核漏洞,现在采用执行 Ring0 Shellcode 的方式进行利用. 获取 HalDis ...
- 在ASP.NET将程序中将上传的附件存储到另一台文件服务器上的实现
假定有两台服务器:A和B,其中A为Web服务器(IP:192.123.1.1, 为iis发布程序的服务器 ),B为文件服务器(IP: 192.123.2.2) 在文件服务器B中某个磁盘下创建一个共享文 ...