Board logo

标题: 面向对象编程(OOP) -1 [打印本页]

作者: look_w    时间: 2019-3-14 19:20     标题: 面向对象编程(OOP) -1

面向对象编程---Object Oriented Programming,简称OOP,是一种程序设计思想.
    OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数.
    面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行.为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数切分为小块函数来降低系统的复杂度.
    面向对象的程序设计把计算机程序看做一组对象的集合,而每个对象都可以接受其他对象发送过来的消息,并处理这些消息,计算机程序的执行像是一系列的消息在这些对象之间传递
    在Python中所有的数据类型都可以看做是对象,当然也可以自定义对象.自定义的对象数据类型就是面向对象中的class(类)的概念
    面向过程和面向对象处理的区别

    # 面向过程
    std1 = {'name' : 'djw', 'score' : 66}
    std2 = {'name' : 'lmf', 'score' : 88}
     
    def print_score(std):  # 处理成绩的过程可以用一个函数来表示
        print('%s got %s' % (std['name'], std['score']))
    # 面向对象
    # Students这种数据类型应该被称为一个对象,这个对象有name和score两个属性(Property),如果要打印学生的成绩,必须首先创建出这个学生对应的对象,然后,给对象发一个print_score的消息,让对象把自己的消息打印出来
    class Students(object):
        def __init__(self, name, score):
            self.name = name
            self.score = score
       def print_score(self):
            print('%s : %s' % (self.name, self.score))

给对象发消息实际上就是调动对象对应的关联函数,我们称之为对象的方法(Method),对象的调用

    djw = Students('Duan jw', 66)
    lmf = Students('LI mf', 88)
    djw.print_score()
    lmf.print_score()

    面向对象的思想是从自然界中抽象出来的.在自然界,类(Class)和实例(instance)都是很常见的,Class是一种抽象的概念,比如我们定义的Students,而实例instance则是一个个具体的student,比如djw和lmf
    所以面向对象的思想是:抽象出Class,根据Class创建Instance
    面向对象的抽象程度要比函数高,因为一个Class既包含数据,又包含操作数据的方法
    继承 封装 多态是面向对象的3大特点
类和实例

    面向对象最重要的概念就是类(Class)和实例(Instance),类是抽象的模板,比如Students类,而实例是根据类创建出来的一个个具体的'对象',每个对象都具有相同的方法,但是各自的数据可能不同
    仍以Studens为例子,在Python中,定义类是通过class关键词来的:

    class Students(object):
        pass

class后面紧接着的是类名,即Students,类名通常是大写字母开头的单词,紧接着的是(object),表示该类是从那里继承下来的,如果没有合适继承的类,就使用object类,这是所有的类最后都会继承的类

    定义好Students类之后,就可以根据Students类创建出Students的实例,,创建实例是通过类名+()来实现的,后面的是内存地址

    我们可以自由的给一个变量绑定属性 djw.sex = 'boy'
    由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制添加进去,通过定义一个特殊的方法init方法 注意init前后都是两个下划线
    注意到init的第一个参数永远是self,表示创建的实例本身,因此在init内部就可以把各种属性绑定到self,因为self就指向创建的实例本身
    有了init方法,在创建实例的时候,就不能传入空的参数了,必须传入与init方法匹配的参数,但self不需要传,Python解释器自己会吧实例变量传进去
    和普通的函数相比,在类中定义的函数只有一个不同点,就是第一个参数永远是实例变量self,并且调用的时候,不用传该参数,除此之外,类的方法和普通的函数没有什么不同,所以,你仍然可以用默认参数, 可变参数 关键字参数 命名关键字参数

数据封装

    我们可以直接在类的内部定义访问数据的函数,这样就把'数据'给封装起来了,称之为类的方法
    要定一个方法,除了第一个参数默认是self之外,其他和普通的函数一样,要调用一个方法,只需要再实例变量上直接调用,除了self不用传入,其他的参数正常传入
    数据和逻辑被封装起来了,调用很容易,而且不需要知道其内部的细节

小结

    类是创建实例的模板,而实例则是一个一个具体的对象,各个实例拥有的数据都互相独立,互不影响.
    方法就是与实例绑定的函数,与普通函数不同的是,方法可以直接访问实例的数据
    与静态语言不同,Python允许对实例变量绑定任何数据,也就是说,对于两个实例变量,虽然他们都是同一个类的不同实例,但是拥有的变量都可能不同




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0