Python面向对象多态分析的例子

多态是面向对象语言的一个基本特性,多态意味着变量并不知道引用的对象是什么,根据引用对象的不同表现不同的行为方式。在处理多态对象时,只需要关注它的接口即可,Python中并不需要显示的编写(像Java一样)接口,在使用对象的使用先假定有该接口,如果实际并不包含,在运行中报错。

class handGun():
    def __init__(self):
        pass
    def fire(self):
        print 'handGun fire'
class carbine():
    def __init__(self):
        pass
    def fire(self):
        print 'carbine fire'
import handGun
import carbine
class gunFactory():
    def __init__(self,gun_type):
        self.gun_type = gun_type
    def produce(self):
        if handGun == self.gun_type:
            return handGun.handGun()
        else:
            return carbine.carbine()
客户端

fa = gunFactory(handGun)
gun = fa.produce()

只要是枪,就认为它具有开火的功能,如果没有开火的功能,程序运行中就报错

gun.fire()

可以看到跟一般的静态语言相比,python并没有在语言级别来保证接口的正确性,只能依靠文档、代码来保证,可以在代码中检查接口是否存在hasattr(gun,’fire’)。

我们再来看一个例子,方法多态:
我们首先创建一个名为MyClass.py的文件,代码如下

__author__= 'MXi4oyu'
classPeople:
  def say(self):
    print("大家好!")
classStudent:
  def say(self):
    print("老师好!")

我们再创建一个Main.py的文件,代码如下:

__author__= 'MXi4oyu'
fromrandom import choice
importMyClass
p1=MyClass.People()
stu1=MyClass.Student()
#通过choice方法我们可以随机选择列表中的某一项
obj=choice([p1,stu1])
print(type(obj))
obj.say()

我们创建的临时对象obj是由随机函数取出来的,我们不知道它的具体类型,但是我们可以对它进行相同的操作。即让它调用say方法,然后根据其类型的不同,它所表现的行为不同。这就是多态。

时间: 2024-11-01 09:49:18

Python面向对象多态分析的例子的相关文章

Python的面向对象思想分析_python

本文实例讲述了Python的面向对象思想.分享给大家供大家参考.具体分析如下: 面向对象的基本思想是封装,继承,多态. 首先是继承: 定义一个类: 复制代码 代码如下: class Bird(object):      have_feather = True      way_of_reproduction  = 'egg' 调用这个类: 复制代码 代码如下: summer = Bird()  print summer.way_of_reproduction 与Java不同是,Python是不需

python基于面向对象的分析和设计

1 原文地址 http://learnpythonthehardway.org/book/ex43.html 2 引言 2.1 译者 特别在编程语言的学习过程中, 通常会纠结在语言本身的细节中, 然后发现学习的过程变得越来越枯燥, 以至于最后放弃了这门才刚刚起步的语言, 投身到新的一个轮回中. 因为他们忘记了: 快乐来自于创造. 当然起先掌握一门语言还是很有必要的. 2.2 作者 我(以下文中的我均指作者)将描述在运用python的语言建立一些东西的过程, 这些描述更适用于运用python面向对

python面向对象的学习笔记

创建类: #!/usr/bin/python # Filename: simplestclass.py   class Person:     pass # An empty block   p = Person() print p $ python simplestclass.py <__main__.Person instance at 0xf6fcb18c> 我们使用类名后跟一对圆括号来创建一个对象/实例.为了验证,我们简单地打印了这个变量的类型.它告诉我们我们已经在__main__模块

OC面向对象—多态

OC面向对象-多态 一.基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态. 在使用多态是,会进行动态检测,以调用真实的对象方法. 多态在代码中的体现即父类指针指向子类对象. Animal类的声明 Animal类的实现 Dog类继承自Animal类 Dog类的实现 测试程序: 二.使用注意 代码分析: Dog *d=[[Animal alloc] init]; 动物是一条狗?语义正确吗? NSString *str=[Dog new]; 狗是一个字符串?正确吗? Oc语

《Python机器学习——预测分析核心算法》——第2章 通过理解数据来了解问题

第2章 通过理解数据来了解问题 Python机器学习--预测分析核心算法新数据集(问题)就像一个包装好的礼物,它充满了承诺和希望.一旦你能解决它,你就收获了喜悦.但是直到你打开它,它都一直保持着神秘.本章就是告诉你怎么"打开"新的数据集,看清楚里面都有什么,知道如何处置这些数据,并且开始思考如何利用这些数据构建相应的模型. 本章有两个目的:一是熟悉这些数据集,这些数据集被用来作为解决各种类型问题的例子,主要是利用第4章和第6章介绍的算法:另一个目的就是展示Python中分析数据的工具包

python使用正则表达式分析网页中的图片并进行替换的方法

 这篇文章主要介绍了python使用正则表达式分析网页中的图片并进行替换的方法,涉及Python使用正则表达式的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了python使用正则表达式分析网页中的图片并进行替换的方法.分享给大家供大家参考.具体分析如下: 这段代码分析网页中的所有图片表单<img>,分析后为其前后添加相应的修饰标签,并添加到图片的超级链接. 代码如下: result = value.replace("[ page ]","

面向对象的分析

面向对象的分析OOA(object-oriented analysis)是软件开发过程中的问题定义阶段,这一阶段最后得到对问题论域的清晰.精确的定义.传统的系统分析产生一组面向过程的文档,定义目标系统的功能.面向对象分析则产生一种描述系统功能和问题空间的基本特征的综合文档. 9.3.1 论域分析和应用分析 9.3.2 Coad和Yourdon面向对象的分析过程

Coad和Yourdon面向对象的分析过程

Coad和Yourdon的方法是建立在信息模型化技术.面向对象的程序设计和知识库系统的基础之上的,方法分为面向对象的分析(OOA)和面向对象的设计(OOD).我们在这里先讨论Coad和Yourdon面向对象的分析,在下一节中再讨论面向对象的设计. Coad和Yourdon认为面向对象的分析主要应该考虑:一个与特定应用有关的对象,对象与对象在结构和相互作用上的关系.在面向对象的分析中,需要建立分析模型来描述系统的功能. OOA的任务 面向对象的分析需要完成两个任务: ●形式的说明所面对的应用问题,

uml学习入门 2 面向对象方法分析与设计

1.面向对象分析 面向对象分析的目的是知识客观世界并进行建模. 其实在面向对象的分析过程中也是对需求的分析和理解. 使用面向对象分析的过程一般如下: 获取问题陈述-->确定类-->准备数据字典-->确定关联-->使用继承来细化类型-->完善对象模型-->建立对象动态模型-->建系统功能模型 (1) 获取问题陈述就是与用户一起理解系统,搞清楚系统的业务逻辑,发现用户的需求,在这个时候我们应该以一个用户的身份去看待这些需求.很多设计人员在这个时候没有做足功能,导致最后