zoukankan      html  css  js  c++  java
  • 面向对象

    面向对象编程介绍

    类和对象

    定义类

    创建对象

    _init_方法

    应用:创建多个对象

    self

    隐藏数据

    面向对象编程介绍

     区分面向对象和面向过程

    举例:

    买电脑(两种方式)
    1.
    *网上搜资料查询
    *根据自己预算和需求,定制电脑型号
    *去市场找电脑实体店筛选
    *业务员推荐介绍各种款式
    *砍价n分钟,价格6k
    *下单付款,带走笔记本
    *使用了一段时间,各种问题
    注意:强调的是步骤、过程,每一步都是自己亲自实现
    
    2.
    *找精通电脑的朋友
    *交易
    注意:强调的是精通电脑的朋友,不需要签字实现所有的步骤,只需要调用“精通电脑的朋友”就可以解决问题,这种解决问题的思路就是面向对象

     注意:用面向对象的思维解决问题的重点就是:

    1.当遇到一个需求的时候不需要自己去实现,如果是自己一步步实现的话就是面向过程

    2.应该调用一个专门做这种事情的人来做

    3.面向对象是基于面向过程的

    面向对象(Object-oriented:简称:OO)

    定义为:按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的办法

    面向对象编程(Object oriented Pogramming-OOP)是一种解决软件复用的设计和编程方法。这种方法把软件系统中相近相似的操作逻辑和操作应用数据、状态,以类的形式描述出来,以对象实例的形式在软件系统中复用,以、达到提高软件开发效率的作用。

    类和对象

    *面向对象编程的2个非常重要的概念:类和 对象

    *对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念---类

    *类就像当与制造飞机时的图纸,可以用它来进行制造的飞机就相当于对象

    1.类

    人以类聚,物以群分
    具有相似内部状态和运动规律的实体的集合(或统称、抽象)
    具有相同属性和行为事物的统称

    解释:

      1.类是抽象的,在使用的时候通常会找到这个类的一个具体的存在,使用这个具体的存在。

      2.一个类可以找到多个对象

    2.对象

    1.某一个具体事物的存在,在现实世界中可以看得见摸得着的。
    2.可以直接使用的

    3.类和对象的关系

      类就是创建对象的模版

    3.类的构成

     类(class)由3个部分构成

      *类的名称:类名

      *类的属性:一组数据

      *类的方法:允许对进行操作的方法(行为)

    4.类的抽象

      拥有相同(或者类似)属性和行为的对象都可以抽象出一个类

      方法:一般名词都是类

    定义类

      定义一个类,格式如下:

    class 类名:
         方法列表
    #定义一个Car类
    
    #定义类
    class Car:
          #方法
          def getCarInfo(self):
              print('铅笔个数:%d,颜色%s '%(self.wheelNum,self.color))
          def move(self):
              print("车正在移动...")

    说明:

        *定义类时有2种,新式类和经典类,上面的Car是经典类,如果是Car(object)则为新式类

        *类名的命名规则建议按照“大驼峰”

    创建对象

       如果说上面定义了Car类,就好比给车子做了设计图纸;那么创建对象就是说把图纸交给工程师去制造了。

       python中,可以根据已经定义的类去创建出一个个对象

       创建对象的格式为:

        

    对象名:类名()

    创建对象:

    #定义类
    class Car:
        #移动
        def move(self):
              print('车在行驶~')
        #鸣笛
        def too(self):
              print("车在鸣笛~")
    
    #创建一个对象,并用变量SDP来保存它的引用
    SDP = Car()
    SDP.color = '白色'
    SDP.wheelNum = 4  #4个轮子
    SDP.move
    SDP.tppt
    print(SDP.color)
    print(SDP.wheelNum)

    总结:

       *SDP = Car(),这样产生了一个Car的实例对象,此时也可以通过实例对象SDP来访问属性或者方法

       *第一次使用SDP.color = ‘白色’ 表示给SDP这个对象添加属性,如果然后再次出现SDP.color = XXX 表示对属性进行修改

       *SDP是一个对象,它拥有属性(数据)和方法(函数)

    _init_()方法

    解释:刚刚给SDP这个对象添加了2个属性(车轮数量和车的颜色),如果需要再次创建对象的话,需要进行添加属性,会比较麻烦;

    是否有办法在创建对象的时候,顺便把车这恶搞对象的属性给设置了?

    使用:   _init_() 方法

     1.使用方式

    def 类名:
        def _init_():
            pass

    2.init()方法的调用

    #定义车类
    class Car:
        def _init_(self):
            self.wheelNum = 4
            self.color = '蓝色'
        
        def move(self):
            print'车在行驶,目标:云南'
    
    #创建对象
    SDP = Car()
    print('车的颜色为:%s ' %SDP.color)
    print('车轮数量:%d ' %SDP.wheelNum)

    总结:当创建Car对象后,在没有调用 _init_()方法的前提下,SDP就默认有了2个属性whellNum和color,原因是 _init_()方法是在创建对象后,就立刻被调用了。

    既然在创建完对象后_init_()方法已经被默认的执行了,那么能否让对象在默认调用_init_()方法的时候传递一些参数呢?如果可以,该怎样传递?

    #定义车类
    class Car:
        def _init_(self , newwheelNum , newcolor):
            self.wheelNum = newwheelNum
            self.color = newcolor
    
        def move(self):
            print'车在行驶,目标:云南'
    
    #创建对象
    SDP = Car(4,‘green’)
    print('车的颜色是:%s' %SDP.color)
    print('车轮数量是 %d ' %SDP.wheelNum)

     总结:

    *_init_()方法,在创建一个对象时默认被调用,不需要手动调用

    *_init_(self)中,默认有1个参数名字为self,如果在创建对象时传递了2个实参,那么_init_(self)中出现了self作为第一个形参外还需要2个形参,例如_init_(self,x,y)

    *_init_(self)中的self参数,不需要开发者传递,python解释器会自己进行传递

    应用:创建多个对象

     *根据上两节创建一个Car类

     *创建出多个车对象,比如SDP、GUID等

    self 

    1.理解self

    #定义一个类
    class Animal:
         #方法:
         def _init_(self,name):
              self.name = name
         def printName(self):
              print('名字为:%s' %self.name)
    
    #定义一个函数
    def myprint(animal):
        animal.printName()
    
    dog1 = Animal('小毛')
    myprint(dog1)
    
    dog2 = Animak(‘小对’)
    myprint(dog2)

    总结:

    *所谓的self,可以理解为自己,就是对象自身的意思

    *某个对象调用其他方法时,python解释器就会把这个对象作为第一个参数传递给self,所以开发人员只需要传递后面的参数即可。

    隐藏数据

     修改对象的属性

    1.直接通过对象名修改  

    SweetPotato.cookedLevel = 5

    2.通过方法间接修改

    SweetPotato.cook(5)

    总结:如果一个对象与另外一个对象有一定的关系,那么一个对象可用是另外一个对象的属性。

  • 相关阅读:
    《Machine Learning in Action》—— 白话贝叶斯,“恰瓜群众”应该恰好瓜还是恰坏瓜
    《Machine Learning in Action》—— 女同学问Taoye,KNN应该怎么玩才能通关
    《Machine Learning in Action》—— Taoye给你讲讲决策树到底是支什么“鬼”
    深度学习炼丹术 —— Taoye不讲码德,又水文了,居然写感知器这么简单的内容
    《Machine Learning in Action》—— 浅谈线性回归的那些事
    《Machine Learning in Action》—— 懂的都懂,不懂的也能懂。非线性支持向量机
    《Machine Learning in Action》—— hao朋友,快来玩啊,决策树呦
    《Machine Learning in Action》—— 剖析支持向量机,优化SMO
    《Machine Learning in Action》—— 剖析支持向量机,单手狂撕线性SVM
    JVM 字节码指令
  • 原文地址:https://www.cnblogs.com/FlameLuo/p/9654951.html
Copyright © 2011-2022 走看看