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

python之面向对象(一)

2016-06-20 18:20 417 查看
python编程分为三个阶段:

面向过程编程:根据业务逻辑从上到下垒

函数式编程:将某功能进行函数封装,使用时调用函数即可,减少代码重复量

面向对象编程:对函数进行分类和封装

理论上我们是比较鄙视面向过程编程的,那么问题来了,那函数式编程和面向对象编程我们该用哪个呢?

先来看两个的特点吧:

函数编程,逻辑清晰,简单,为项目而生,维护困难,函数式编程提倡的解决方案是数据是不可变的, 就没有了一直在改变的状态, 从而降低了复杂度.

面向对象,大而全,复杂,为大项目而生,开发周期长,理论上长久维护简单,实际上一塌糊涂...面向对象一个最大的特点是抽象, 所以面向对象式编程特别适合处理业务逻辑,因此被广泛应用于目前的软件开发当中.

总结

那么什么情况下用面向对象呢?当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可,我觉得这个是对于我这种初学者的最简答案了吧...

什么时候使用函数式编程呢?各个函数之间是独立且无共用的数据

类和对象的创建

面向对象编程方式的落地,需要使用类和对象来实现:

类可以看为一个模板,模板了包含了多个函数,函数实现某些功能

对象是根据模板创建的实例,通过实例对象可以调用类中的功能函数

那么我们来看一个例子吧:



class是关键词,声明创建一个类

类后面加(),表示创建对象

类中定义函数时,第一个参数必须为self,而类中的函数称为方法

面向对象的三大特性

不是抽烟喝酒烫头....是

封装

继承

多态

封装

封装其实是分为两步:封装和调用!

step1

将内容封装到某处



从上面的图,我们可以看出一个问题,self是个什么东西?

self是一个python自动会给传值的参数那个对象执行方法,self就是谁!

**类中有一个特殊的方法,叫构造方法:init,类会自动执行,我们可以用__init__方法来传入变量,初始化一些基础数据.**

step2

调用就比较简单了,可分为两种情况:

通过对象直接调用被封装的内容

通过self间接调用被封装的内容

class foo:
def __init__(self,name,age):
self.name=name
self.age=age

def test(self):
print('I am %s,age:%s'%(self.name,self.age))

obj=foo('cc',22)
print(obj.name) #通过对象直接调用
print(obj.age)
print('=======================')
objx=foo('cengc','33')
objx.test()         #通过self间接调用

out:

cc
22
=======================
I am cengc,age:33

总结下:面向对象的封装,其实就是使用构造方法,将内容封装到对象中,然后通过对象直接或者self间接获取被封装的内容

继承

对于面向对象的继承来说,其实就是将多个类共有的方法提取到父类中,子类仅需继承父类而不必一一实现每个方法,也可以这么认为:父类中的所有函数copy到了子类中.

继承的叫法分为两种:父类/子类,基类/派生类.

一个典型的继承的例子:

class it:
def __init__(self,name):
self.name=name

def woker(self):
print('i am a iter,my name is %s'%(self.name))

class coder(it):
def coding(self):
print('i am coding now!')

a=coder('cc')
a.coding()
a.woker()

输出:

i am coding now!
i am a iter,my name is cc

需要注意的是:如果类中,包括子类的父类中定义了构造方法的参数时,创建对象需要传入相应的参数值!

多继承

python中的继承可以多继承,意思就是一个子类可以有多个父类,比如:

class a(b,c,d,e):   #b,c,d,e为类
def xxx(self):
pass

多继承中需要注意的是:

多继承时,按照继承的顺序排优先级c3(c2,c1)

先上两张图:

深度优先,无共同父类,多继承方式



广度优先,有共同的父类,多继承方式,最后才去找共同的父类,



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