首页 > 编程语言 > 详细

python学习----------面向对象1

时间:2016-01-14 19:23:54      阅读:278      评论:0      收藏:0      [点我收藏+]

一、概述

    python作为一门高级语言,也是面向对象的,在学习面向过程编程中,我们会很据业务需要自上而下进行编写代码,进一步发现这样会导致大量代码重用,所以我们改用函数式编程,将代码封装在一个函数中,日后便不需要重复写代码,只需要调用即可。我们都知道,在python中,一切都是对象,对象都是由类来创建的,为了以后让我们的开发越快越强越好,我们必须掌握面向对象编程。

二、概念(oop编程)

1、面向对象:将函数进行分类和封装,让开发变得perfect。

2、面向对象并不神秘,它只是一种编程方式,是对“对象”和“类”的使用,然而类就是一个模板,里面    包含很多函数,函数里实现功能(在类中将函数叫做方法),而对象是根据类创建的实例,根据实例对    象可以执行类中的方法。

3、创建类:

class province: #创建类
    
    def shanxi(self):
        print "山西"
     
    def henan(self,name):
        print "%s 是河南的省会" %name
        
obj = province() #根据类创建对象
obj.shanxi()     #执行shanxi方法
obj.henan("郑州")#执行henan方法

  class是关键字,表示类

  创建对象类名后面直接加括号即可

 小结:

 可以看出面向对象编程是通过创建对象,对象调用方法来执行,而函数式编程是通过执行函数

三、面向对象之三大特性

   面向对象三大特性:封装、继承、多态

   对于python的面向对象来说,不支持多态也用不到多态,所以我们就一心一意学python的封装和继承就好

1、封装

封装:就是把内容封装在某个地方,等用的时候再去调用,即1、将内容封装到某处,2、在某处调用封装的       内容

下面详解介绍如何操作:

第一步:将内容封装到某处

class Foo:  #创建类Foo
    def __init__(self,name,age):  #称为析构方法,根据类创建对象时自动执行,
        self.name = name
        self.age = age

#根据类Foo创建对象obj,自动执行__init__方法
#将"tom"和18封装在obj的name和age属性中。       
obj = Foo("tom",18)

解释self:

self是一个形式参数,当执行obj = Foo("tom",18)时,self等于obj,指的是变量本身,按照惯例称之为self

第二步:从某处调用被封装的内容

调用有两种方式

1、用创建的对象直接调用

实例:调用方法为对象.属性名。例如:obj.name,obj.age

class Foo:  #创建类Foo
    def __init__(self,name,age):  #称为析构方法,根据类创建对象时自动执行,
        self.name = name
        self.age = age

#根据类Foo创建对象obj,自动执行__init__方法
#将"tom"和18封装在obj的name和age属性中。       
obj = Foo("tom",18) 
print obj.name     #用创建的对象obj直接调用属性name
print obj.age      #用创建的对象obj直接调用属性age

2、用self间接调用

执行类中的方法时通过self间接调用被封装的内容

class Foo:  #创建类Foo
    def __init__(self,name,age):  #称为析构方法,根据类创建对象时自动执行,
        self.name = name
        self.age = age
    def hello(self):
        print self.name
        print self.age
#根据类Foo创建对象obj,自动执行__init__方法
#将"tom"和18封装在obj的name和age属性中。       
obj = Foo("tom",18) 
print obj.name     #用创建的对象obj直接调用属性name
print obj.age      #用创建的对象obj直接调用属性age
obj.hello()        #python会默认将obj传给self参数,即obj.hello(obj),内部变为self=obj,
                    self.name="tom",self.age=18

总结:

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

2、继承 

在python中的继承也是子继承父(专业术语,基类和派生类)

对于面向对象的继承,就是将多个类共同的方法提取到父类中,子类只需继承父类即可,从而减少子类一一去实现每个方法。

技术分享

对于python与其它语言不同的是,python支持多继承

而多继承是怎么实现的呢?以及有哪些注意的事项呢?

先介绍两个概念:经典类和新式类

从一般写法上区别:如果当前类或者父类继承了object类,那么就是新式类,反之就是经典类。举例为:

技术分享技术分享

这样一来继承的方式就不一样了

经典类多继承服从深度优先,而新式类多继承服从广度优先。麻烦来了,何为深度优先和广度优先,画图表示为:

技术分享

技术分享

经典类多继承用代码表示为:

class D:
    def hello(self):
        pass
        
class C(D):
    def hello(self):
        pass
        
class B(D):
    def hello(self):
        pass
        
class A(B,C):
     pass
     
 obj = A()
 obj.hello()

执行obj.hello()时,先在A类中找,若没有,再去B类中找,若没有再去D类中找,若没有再去C类中找,若C中也没有,就直接报错。在查找过程中,如果找到就不再继续找了,就中断了。

顺序为A-->B----D---->C,

新式类多继承代码为:

class D(object):
    def hello(self):
        pass
        
class C(D):
    def hello(self):
        pass
        
class B(D):
    def hello(self):
        pass
        
class A(B,C):
     pass
     
 obj = A()
 obj.hello()

执行obj.hello()时,先从A类中找,若没有在B类中找,若没有再C类中,若没有D类中找,若没有直接报错。在查找过程中,如果找到就不再继续找了,就中断了。

执行顺序为:A-->B----C---->D

用几个小问题总结一下面向对象的知识

1)什么样的代码才是面向对象?

答:程序中的所有功能都是用类和对象实现的代码,一般在实际编程中,都是和函数式编程混合使用的。

2)面向对象的应用场景

1、多函数使用相同的值,例如,数据库的增删改查操作都需要连接数据库字符串、主机名、用户名和密码

2、需要创建多个事物,每个事物属性个数相同。

3)类和对象在内存中是如何保存的?

类以及类中的方法在内存中都只有一份,而根据类创建的对象在内存中都要每存一份,如下图所示:

技术分享

以上就是初步对面向对象编程的简单认识,在这里感谢武sir在网络教学中的详细讲解以及武sir的博客

http://www.cnblogs.com/wupeiqi/p/4493506.html


本文出自 “crazyforever” 博客,请务必保留此出处http://crazyforever.blog.51cto.com/7362974/1734990

python学习----------面向对象1

原文:http://crazyforever.blog.51cto.com/7362974/1734990

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!