面向过程编程最易被初学者接受,其每每用一长段代码来实现指定功能,开发过程当中最多见的操做就是粘贴复制,即:将以前实现的代码块复制到现需功能处python
随着时间的推移,开始使用了函数式编程,加强代码的重用性和可读性,就变成了这样:编程
今天要学习的是一种新的编程方式:面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)函数式编程
注意:Java和C#来讲只支持面向对象编程,而python比较灵活即支持面向对象编程也支持函数式编程函数
面向对象编程是一种编程方式,此编程方式的落地须要使用“类”和“对象”来实现,因此,面向对象编程其实就是对“类”和“对象”的使用。学习
类就是一个模板,模板里能够包含多个函数,函数里实现一些功能spa
对象则是根据模板建立的实例,经过实例对象能够执行类中的函数设计
注意:类中函数第一个参数必须是self,类中定义的函数叫作“方法”对象
面向对象三大特性继承
面向对象的三大特性是指:封装、继承和多态游戏
1、封装
封装,顾名思义就是将内容封装到某个地方,之后再去调用被封装在某处的内容。
因此,在使用面向对象的封装特性时,须要:
第一步:将内容封装到某处
self是一个形式参数,当执行obj1 = Foo(“wupeiqi”,18)时,self等于obj1
当执行obj2 = Foo(“alex”,78)时,self等于obj2
因此,内容其实被封装到了对象obj1和obj2中,每一个对象都有name和age属性,在内存里相似于下图来保存
第二步:从某处调用被封装的内容
调用被封装的内容时,有两种状况:
1.经过对象直接调用被封装的内容
上图展现了对象obj1和obj2在内存中保存的方式,根据保存格式能够如此调用被封装的内容:对象.属性名
2.经过self间接调用被封装的内容
执行类中的方法时,须要经过self间接调用被封装的内容
综上所述,对于面向对象的封装来讲,其实就是使用构造方法将内容封装到 对象 中,而后经过对象直接或者self间接获取被封装的内容。
游戏人生程序
一、建立三个游戏人物,分别是:
二、游戏场景,分别:
2、继承
继承,面向对象中的继承和现实生活中的继承相同,即:子能够继承父的内容。
例如:
猫能够:喵喵叫、吃、喝、拉、撒
狗能够:汪汪叫、吃、喝、拉、撒
若是咱们要分别为猫和狗建立一个类,那么就须要为猫和狗实现他们全部的功能,以下所示
class 猫: def 喵喵叫(self): print '喵喵叫' def 吃(self): # do something def 喝(self): # do something def 拉(self): # do something def 撒(self): # do something class 狗: def 汪汪叫(self): print '喵喵叫' def 吃(self): # do something def 喝(self): # do something def 拉(self): # do something def 撒(self): # do something
上述代码不难看出,吃、喝、拉、撒是猫和狗都具备的功能,而咱们却分别对猫和狗的类中编写了两次。若是使用继承的思想,以下实现:
动物:吃、喝、拉、撒
猫:喵喵叫(猫继承动物的功能)
狗:汪汪叫(狗继承动物的功能)
代码:class Animal:
def eat(self):
print "%s 吃 " %self.name
def drink(self):
print "%s 喝 " %self.name
def shit(self):
print "%s 拉 " %self.name
def pee(self):
print "%s 撒 " %self.name
class Cat(Animal):
def __init__(self, name):
self.name = name
self.breed = '猫'
def cry(self):
print '喵喵叫'
class Dog(Animal):
def __init__(self, name):
self.name = name
self.breed = '狗'
def cry(self):
print '汪汪叫'
# ######### 执行 #########
c1 = Cat('小白家的小黑猫')
c1.eat()
c2 = Cat('小黑的小白猫')
c2.drink()
d1 = Dog('胖子家的小瘦狗')
d1.eat()
因此,对于面向对象的继承来讲,其实就是将多个类共有的方法提取到父类中,子类仅需继承父类而没必要一一实现每一个方法。
注:除了子类和父类的称谓,你可能看到过 派生类 和 基类 ,他们与子类和父类只是叫法不一样而已。

那么问题又来了,多继承呢?
1.python的类能够继承多个类,Java和C#中则只能继承一个类
2.python的类若是继承了多个类,那么气寻找方法的方式有两种,分别是:深度优先和广度优先
3、多态
python不支持Java和C#这一类强类型语言中多态的写法,可是原生多态,其python崇尚“鸭子类型”
以上就是本节对于面向对象初级知识的介绍,总结以下: