zoukankan      html  css  js  c++  java
  • python中对象的多态、封装、继承介绍

    python是一种面向对象的语言。面向对象程序设计中的术语对象基本上可以看做数据(特性)以及由一系列可以存取、操作这些数据的方法所组成的集合。使用对象替代全局变量和函数的原因可能有很多,其中对象最重要的优点包括三个方面:

    1. 多态:可以对不同类的对象使用同样的操作
    2. 封装:对外部世界隐藏对象的工作细节
    3. 继承:以普通的类为基础建立专门的类对象

    多态和方法

    程序得到了一个对象,不知道它是怎么实现的,它可能有多种"形状"。

    绑定到对象特性上面的函数称为方法。

    >>> 'abc'.count('a')
    1
    >>> [1,2,'a'].count('a')
    1

     对应变量x来说,不需要知道它是字符串还是列表,就可以调用它的count方法,不用管它是什么类型

    举例,标准库random中包含choice函数,可以从序列中随机选出元素。给变量赋值:

    >>> from random import choice
    >>> x=choice(['Hello,world!',[1,2,'e','e',4]])

    运行后,变量x随机选择一个值

    >>> x.count('e')
    1
    >>> x
    'Hello,world!'
    >>> 

    多态的多种形式

    任何不知道对象到底是什么类型,但是又要对对象操作时,都会用到多态。

    >>> 1+2
    3
    >>> 'Hello,'+'world'
    'Hello,world'
    >>> add(1,2)
    3
    >>> add('Hello,','world')
    'Hello,world'

    参数可以是任何支持加法的对象。

    编写打印对象长度消息的函数

    >>> def length_message(x):
        print "The length of",repr(x),"is",len(x)

    函数中使用了repr函数,repr函数是多态特性的代表之一

    >>> length_message('Fnord')
    The length of 'Fnord' is 5
    >>> length_message([1,2,3])
    The length of [1, 2, 3] is 3

    封装

    封装是对全局作用域中其他区域隐藏多余信息的原则。不用关心对象是如何构建的而直接进行使用

    假设有一个叫做OpenObject的类:

    >>> o=OpenObject()
    >>> o.setName('Sir Lancelot')
    >>> o.getName() #此案例并不能运行成功,只是假设
    'Sir Lancelot'

    创建了一个对象后,将变量o绑定到该对象上。可以使用setName和getName方法(假设已经由OpenObject类提供)。

    假如变量o将它的名字存储在全局变量globalName中:

    在使用OpenObject类的实例时,不得不关心globalName的内容。

    >>> globalName
    'Sir Lancelot'
    >>> globalName='Sir Gumby'
    >>> o.getName() 
    'Sir Gumby'

    如果创建了多个OpenObject实例会出现问题

    >>> o1=OpenObject()
    >>> o2=OpenObject()
    >>> o1.setName('Robin Hood')
    >>> o2.getName()
    'Robin Hood'

    如果不用全局变量而用特性重写类,并且重命名为ClosedObject

    >>> c=ClosedObject()
    >>> c.setName('Sir Lancelot')
    >>> c.getName()
    'Sir Lancelot'
    
    >>> r=ClosedObject()
    >>> r.setName('Sir Robin')
    >>> r.getName()
    'Sir Robin
    
    >>> c.getName()
    'Sir Lancelot'

    继承

     如果已经有了一个类,又想建立一个新的类似的类,让新的类从老的类中继承方法,新的类增加几个方法

  • 相关阅读:
    Silverlight2 开发环境 安装程序顺序
    Java——IO流超详细总结
    【慢慢学Android】:2.SharedPreferences对数据的存储
    【慢慢学算法】:求最大公约数
    【慢慢学算法】:求较大素数 筛选法
    【慢慢学算法】:排名
    手把手教你将vim配置成一个C/C++的超级IDE
    【慢慢学算法】:特殊乘法
    【慢慢学算法】:qsort()与sort的用法(收藏)
    【慢慢学算法】:数字阶梯求和
  • 原文地址:https://www.cnblogs.com/nsds/p/6489790.html
Copyright © 2011-2022 走看看