python基础 - 12 面向对象

一、面向对象(oop)简介

  1. 代码的执行流程
    代码执行流程图
  2. 什么是对象?
    对象就是内存中专门用来存储指定数据的一块区域
    实际上对象就是一个容器,专门用来存储数据

二、面向对象的结构

每个对象中都保存了三个数据:

  1. id (标识)
    a. 用来标识对象的唯一性,每个对象都有唯一的id
    b. id是由解释器生成的,是对象在内存中的一个地址(内存地址)
    c. 通过id()来查看对象的内存地址

  2. type(类型)
    a. 类型就决定了对象有哪些功能
    b. 通过type()函数来查看对象的类型

  3. value(值)
    a. 值指的就是对象中存储的具体数据
    b. 可变对象和不可变对象
    区分可变对象和不可变对象的方法就是不改变对象id的前提下,对象的值是否可以改变
    number(int、float)、str、tuple、bool都是不可变对象
    list、disc、set都是可变对象

三、面向对象的举例

1.简单来说,所谓面向对象就是语言中所有的操作都是通过对象来实现的
面向对象是一种思考问题的方式,是一种思想
面向对象将事物变得简单化了

2.举例
把大象装到冰箱需要几步?
打开冰箱 -----> 装大象 ---------> 关闭冰箱 (面向过程)
打开功能 存储功能 关闭功能

以上这三个功能都是冰箱具备的功能,我们只需要定义冰箱这个变量,让它去完成相应功能即可(面向对象)

3.什么是面向对象?
面向对象是一种思想,它将事物变得简单化了
面向对象具备封装、继承、多态等特征(展开详述)
举例

4.面向过程和面向对象的优缺点
面向过程是将一个功能分解成一个一个小的步骤
这种编程方式只适用于一个功能,当我们需要完成新的功能时,就需要重新编写代码,复用性比较低
这种编程方式比较符合人的思考方式,编写起来相对简单

面向对象 容易维护,便于复用但不太符合人的思考方式编写起来较为复杂

举例

孩子吃瓜
第一步 妈妈穿衣出门
第二步 妈妈骑电动去超市
第三步 妈妈买瓜
第四步 妈妈结账回家
第五步 孩子吃瓜

面向过程只能完成孩子吃瓜这一功能,当要完成孩子吃肉这一功能时需要重新编写代码
面向对象只需要修改对象的某些功能就可以实现

四、类(class)的简介

目前我们学习的都是python内置的对象,并不能完成编程所需的所有功能,因此我们需要自定义一些对象,这些对象就称为类
Python自定义的对象以小写开头,类以大写开头,且使用大驼峰命名方式,满足标识符的命名规则

简单来说,类就是一张图纸,在程序中我们需要根据类来创建对象

4.1 类的创建

语法:
class 类名():
代码块

     class  MyClass():
             pass

通过类来创建对象

    mc = MyClass()        #用MyClass来创建对象mc

mc称为类MyClass的实例

    type(mc)             #   该对象类型为MyClass  

通过Isinstance()来判断一个对象是否是类的实例

      result = isinstance(mc,MyClass)
      print(result)     #f返回True

五、对象的创建流程

什么是类?

类也是一个对象(类是一个用来创建对象的对象)
类是一个type类型的对象

         class MyClass():
                 pass
          
          mc = MyClass()

我们通过MyClass创建的类都是空类
我们可以向对象中添加变量 ,对象中的变量称为属性
语法:
对象.属性名 = 属性值
类的创建流程

六、类的定义

类和对象都是对现实生活中的事物或者程序内容的抽象(通过某个事物的行为和属性来定义一个具体的事物)

所有的事物均由两部分组成:
1.数据(属性)
2.行为(方法)

      class Person:
           #在类的代码中可以定义变量和函数
           #类中定义的变量称为属性,是所有实例的公共属性,所有实例都可以访问这些变量
           name = ‘钢铁侠’
           #类的函数称为方法,所有类的实例都可以调用这个函数
           #如果是函数,有几个形参就传几个实参;如果是方法,默认传递一个形参,所有类中的方法至少有一个形参
           def speak(a):
                  print('hello')
 
       
       #创建两个类的实例
       p1 = person()
       p2 = person()

类的定义

七、类的属性和方法

1.属性和方法的查找流程
当我们去调用属性和方法时,解释器会现在当前对象中查找是否有该属性或方法,如果有则返回该对象的属性或方法值;如果没有则去当前对象的类对象中查找,有则返回相应值,没有则报错。

        class Person:
           name = ‘钢铁侠’
         
           def speak(a):
                  print('hello')
 
       
       #创建两个类的实例
       p1 = person()
       p2 = person()
       p1.name = '浩克'
      
       print(p1.name)       #返回值为‘浩克’
       print(p2.name)       #返回值为‘钢铁侠’

类对象和实例对象都可以保存属性和方法
如果该属性或方法是所有类共享的,则应该保存到类对象中
如果某属性或方法是某个实例对象私有的,则应该保存到实例对象中
一般情况下,属性保存在实例对象中,方法保存在类对象中

要求:p1调用speak()时,输出“你好,我是小明”
p2调用speak()时,输出“你好,我是小李”

       class Person:
           name = ‘钢铁侠’
           #类的方法中看不见类中的属性
         
           def speak(self):
                  #方法中传递的参数指的是当前调用方法的实例对象本身
                  #一般我们将这个形参命名为self
                  print('你好,我是%s' %self.name)
 
       
       #创建两个类的实例
       p1 = person()
       p2 = person()
       p1.name = '小明'
       p2.name = '小李'
      
       p1.speak()
       p2.speak()        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值