zoukankan      html  css  js  c++  java
  • 面向过程和面向对象 , 面向对象基础

    面向过程和面向对象编程

        什么是面向对象编程?
            指的是一门编程思想,它是对着一个具有某种特征和技能的事物进行编程,实现这些对象与对象之间的交互。
        面向过程编程:
            核心是“过程”二字。
            过程指的是做事情的步骤,即先做什么再做什么
            基于该编程思想编写程序,就好比一条工厂流水线,一种机械式的思维方式。
            优点:
                逻辑清晰,复杂的问题流程化,进而简单化。
    
            缺点:
                可扩展性差。
    
        面向对象编程:
            核心是“对象”二字。
            对象指的是特征与技能的结合体。
            基于该编程思想编写程序,就好比在创造世界,一种上帝式的思维方式。
    
            优点:
                可扩展性高。
    
            缺点:
                编写程序的复杂程度要远高于面向过程编程思想。
    
        优先使用面向过程还是面向对象(谁好谁坏)?
            没有谁好谁坏,他们都是一种编程思想。具体问题具体分析。一般是面向过程和面向对象结合,一起使用。
     
    

    对象的产生(类的定义)

    • 定义对象的前提是先定义类。先定义类,后调用类产生对象。

    • 现实世界中,现有对象再有类。

    • 在程序中,必须遵循,先有类,再有对象。

    • 什么是类:

      对象是特征和技能的结合体,类是一系列对象相同的特征与技能的结合体。

    • 如何定义类:

      1. 先从现实世界中,基于一个个的对象,抽取出类

      2. 再定义类

    1. 类

    1. 什么是类

    • 对象是特征与技能的结合体,类就是一系列对象相同的特征和技能的结合体。 在程序里特征就是属性,技能就是方法(函数)

    2. 类的定义:

    # 语法
    class 类名:
    	code
    #  注意: 类名必须要遵循驼峰命名法,python在定义变量与函数时不推荐使用,但在定义类时推荐使用。
     
    
    • 定义类发生的事:

      1. 类在定义时,会开辟一个名为类名的空的名称空间。
      2. 会把类内部所有名字,扔进类的名称空间中。
      注意: 类在定义阶段就已经产生好了名称空间,执行python文件时会执行类内部的代码。  
      函数是在调用的时候才产生名称空间,执行函数里的代码。
      

    3. 类的操作

    • 修改属性和方法:

    类名.变量名或方法名的方式对类内部的内容进行修改。"."会指向类内部的名称空间,从而获取类内部的变量名和方法名。

    class OldboyStudent:
        # 特征
        school = 'oldboy'
        print('tank is handsome...')
    
        # 技能
        def learn(self):
            print('learn python...')
    
        def choose_course(self):  # self = None
            print('choose_course ....')
            
    # 修改属性和方法:类名.变量名或方法名的方式对类内部的内容进行修改。
    # "."会指向类内部的名称空间,从而获取类内部的变量名和方法名。
    
    **************************类的操作***********************
    # 查
    print(OldboyStudent.school)  # oldboy
    
    # 改
    OldboyStudent.school = 'oldgirl'
    print(OldboyStudent.school)
    
    # 增
    print(OldboyStudent.address)  # 报错,特征也称之为属性
    OldboyStudent.address = '上海'
    print(OldboyStudent.address) # 上海
    
    # 删
    del OldboyStudent.address
    print(OldboyStudent.address) # 报错
    OldboyStudent.choose_course(123) # choose_course ....
    

    2. 对象

    1. 对象的产生

    语法:
    
    	类名 + () #调用类产生对象
    

    2. 对象的名称空间

    • 类的名称空间在定义类阶段就已经产生了
    • 对象的名称空间,在调用类时产生

    3. 调用类时发生的事:

    '''
    ******调用类发生的事情:
        1.首先会产生一个空的对象,就是产生“对象的名称空间”。
        2.会自动触发__init__。
        3.会把对象本身以及括号内的参数一并传给__init__函数。
        
    ******总结: 调用类会产生一个对象,调用类的过程叫做类的实例化,产生的对象称之为类的一个实例.
    '''
    

    4. 当对象与对象之间的特征和技能一样

    # 解决方法: 
    在类内部定义__init__函数。
    # 中文翻译: 为对象初始化某些属性。
    __init__: 会在调用类时,自动触发该函数。
    
    • 实例:

      # 学生类
      class OldboyStudent:
          # 若__init__中有self以外的参数,调用类时必须在括号内传入参数。
          def __init__(self, x, y, z):  # self --> 就是对象本身  x = 高峰峰  y=93   z=female
              # print(self, x, y, z)
              # print('此处时__init__。。。。')
              # 给对象添加特征的方式二:
              self.name = x
              self.age = y
              self.sex = z
      
          # 特征
          school = 'oldboy'
          # print('tank is handsome...')
      
          # 技能
          def learn(self):
              print('learn python...')
      
          def choose_course(self):  # self = None
              print('choose_course ....')
      
      
      stu1 = OldboyStudent('高峰峰', 93, 'female')  # OldboyStudent()---> 学生对象
      stu2 = OldboyStudent('小丁丁', 84, 'female')  # OldboyStudent()---> 学生对象
      stu3 = OldboyStudent('大丁丁', 18, 'male')  # OldboyStudent()---> 学生对象
      
      '''
      ******调用类发生的事情:
          1.首先会产生一个空的对象,就是产生“对象的名称空间”。
          2.会自动触发__init__。
          3.会把对象本身以及括号内的参数一并传给__init__函数。
          
      ******总结: 调用类会产生一个对象,调用类的过程叫做类的实例化,产生的对象称之为类的一个实例.
      '''
      
      *********# 对对象的操作与对类的操作相同。******************
      
      

    5. 对象与类的查找顺序

    • '''
      对象与类的查找顺序:
          1.对象.属性,若对象本身有,则优先查找对象自己的。
          2.若对象本身没有,则去类里面找,若类没有,则报错。
      '''
      

    6. 对象调用类里面的方法的特殊之处

    '''
    类内部的函数主要是给对象用的:
        1.由类来调用类内部的函数,该函数只是一个普通的函数,
        普通函数需要接收几个参数就得传入几个参数。
    
        2.由对象来调用称之为对象的绑定方法,
        不同的对象调用该绑定方法,则会将不同的对象传入该绑定方法中.
    
        *******对象的绑定方法,是由对象来调用的,
            特殊之处就是把对象当作第一个参数传入该方法中.
    '''
    
    • 在类调用类里面的方法时,该方法就是普通的函数。有形参就要传值。

    • 当对象调用类里面的方法时,该方法就变成了了绑定方法。方法里的self形参不需要传值,默认接收的实参是该对象名。且类和不同的对象调用同一函数时,他们的内存地址都不同,相当于是把该方法分别复制给了调用它的类和对象。

    • 实例:

      class OldboyStudent:
          def __init__(self, name, age, sex):
              self.name = name
              self.age = age
              self.sex = sex
          # 特征
          school = 'oldboy'
          # 技能
          def learn(self):  # 普通函数
              # print('stu:', self)
              print('learn python...')
      
          def choose_course(self, course):  # self =
              print(f'[{self.name}]choose_course {course} ....')
      
      # print(OldboyStudent.learn)  # function
      # OldboyStudent.learn(123)
      
      
      stu1 = OldboyStudent('高凤凤1', 73, 'female')
      stu2 = OldboyStudent('高凤凤2', 84, 'male')
      
      # 对象之间与类的方法功能是一样的
      OldboyStudent.learn(123)
      stu1.learn() 
      
      *****************类与不同对象分别伪调用****************
      print(OldboyStudent.learn)
      # <function OldboyStudent.learn at 0x0000000009FF0E18>
      print(stu1.learn)
      # <bound method OldboyStudent.learn of <__main__.OldboyStudent object at 0x0000000009FBA278>>
      print(stu2.learn)
      #<bound method OldboyStudent.learn of <__main__.OldboyStudent object at 0x0000000009FBA2B0>>
      
  • 相关阅读:
    csrf 跨站请求伪造
    apache 根据端口访问配置
    对于表单中单双引号问题
    svn常用命令
    urlencode和rawurlencode的区别
    php 显示某一个时间相当于当前时间在多少秒前,多少分钟前,多少小时前
    javaweb基础(24)_jsp一般的标签开发
    javaweb基础(23)_jsp自定义标签
    javaweb基础(22)_Servlet+JSP+JavaBean实战登陆
    javaweb基础(21)_两种开发模式
  • 原文地址:https://www.cnblogs.com/Mcoming/p/11642484.html
Copyright © 2011-2022 走看看