您的位置:首页 > 编程语言 > Python开发

python学习笔记14(多态、封装、继承)

2016-09-09 10:06 597 查看
创建自已的对象(尤其是类型或者被称为类的对象)是python非常核心的概念。
多态: 可对不同类的对象使用同样的操作。

封装:对外部世界隐藏对象的工作细节。 

继承:以普通的类为基础建立专门的类对象。

多态
面向对象程序设计最有趣的特性是多太,它也是让大多数人犯晕的特性,所以,先来介绍这个。
多态意思是“有多种形式”。多态意味着就算不知道变量所引用的对象类是什么,还是能对它进行操作,而它也会根据对象(或类)类型的不同而表现出不同的行为。
 
从最简单的开始
  任何不知道对象到底是什么类型,但是又要对对象“做点什么”的时候,都会用到多态。这不仅限于方法----很多内建运算符和函数都有多态的性质,考虑下面这个例子:

>>> 1 + 2
3
>>> 'fish' + 'license'
'fishlicense'


这里的加运算符对于数字(本例中为整数)和字符串(以及其他类型的序列)都能起作用。假设有个叫做add的函数,它可以将两个对象相加。那么可以直接将其定义成上面的形式,对于很多类型的参数都可以用,如下:

>>> def add(x,y):
return x+y

>>> add(1,2)
3
>>> add('hello,','world!')
'hello,world!'


 

 
封装
封装是对全局作用域中其它区域隐藏多余信息的原则。
封装听起来有些像多态,因为他们都是抽象的原则---他们都会帮助处理程序组件而不用过多关心多余细节,就像函数做的一样。
但是封装并不等同于多态,多态的可以让用户对于不知道是什么类(或对象类型)的对象进行方法调用,而封装是可以不用关心对象是如何构建的而直接进行使用。
创建一个对象(通过像调用函数一样调用类)后,将变量c绑定到该对象上。可以使用setName 和 getName 方法(假设已经有)

>>> c = closedObject()
>>> c.setName('sir lancelot')
>>> c.getName()
‘sir lancelot’


 

 
继承
我们不想把同一段代码写好几,之前使用的函数避免了这种情况。但现在又有个更微妙的问题。如果已经有了一个类,又想建立一个非常类似的类,只是添加几个方法。
比如有动物类,我们又想在动物类的基础上建立鸟类、鱼类,哺乳动物类。
 
创建自己的类

>>> _metaclass_=type      # 新式类的语法中,需要在模块或者脚本开始的地方放置赋值语句 _metaclass_ = type
>>> class person:         # 创建了一个Person的类
def setname(self,name):   # self看起有点奇怪,它是对于对象自身的引用
self.name=name

def getname(self):
return self.name

def greet(self):
print "Hello,world! I'm %s." % self.name

>>> foo = person()        # 创建实例
>>> bar = person()
>>> foo.setname('Ethon')   # 在调用foo的setname 和 greet 函数时,foo自动将自己作为第一个参数传入函数中
>>> bar.setname('wakey')
>>> foo.greet()
Hello,world! I'm Ethon.
>>> bar.greet()
Hello,world! I'm wakey.
>>> foo.name    # 特性也可以在外部访问
'Ethon'
>>> bar.name
'wakey'


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: