• Python 面向对象1-类、对象、属性


    基本理论

    什么是对象?
    万物皆对象,对象是具体物体。(拥有属性、拥有行为。把很多零散的东西,封装成为一个整体)

    Python是一门特别彻底的面向对象编程(oop)的语言
    其他语言:并非全是对象类型,还存在基本数据类型。
    Python语言:全部都是对象类型,所有值都是对象

    面向过程&面向对象

    都是一种解决问题的思路
    面向过程:在解决问题时,关注的是解决问题的每一个过程(步骤:第一步:打开冰箱,第二放入大象。。。)
    面向对象:在解决问题时,关注的是解决问题所需要的对象

    例子:做好饭后洗碗
    面向过程:洗菜-点火倒油-放菜-翻炒-。。【施工者】
    面向对象:你 – 对象(对象会技能做饭,会洗碗),对象-- 自动炒菜机(炒菜)
    “你”所做的是调度安排,而不是做事【调度者】

    总结

    面向对象和面向过程都是解决问题的一种方式。面向对象本身是面对过程的封装。

    面向过程编程最重要的是什么?—按照步骤划分,把任务划分成每个步骤
    面向对象最重要的是什么?–按照功能对对象进行划分,找到对象,确定对象属性和行为
    如何面向对象?1,列举具体实现步骤 2,分离这些步骤中的功能代码块 3,将这些功能代码块划分到某一对象中 4,根据这个对象以及对应的行为,抽象出对应的类

    定义:某个具体对象特征的抽象
    在这里插入图片描述
    类的作用?
    根据抽象的类,生产具体的对象
    属性&行为
    在这里插入图片描述
    类是抽象的。由类产生具体对象后,对象才拥有具体的属性值和方法实现
    例子:类:钱 对象:具体的1毛,1块
    类:汽车 对象:奥迪、比亚迪。。

    类具体成对象,对象抽象成类

    如何定义一个类?

    class 类名:
    pass

    注意:关键词class 、没有括号,类名首字母大写

    #定义函数
    def run():
        pass
    
    #定义类
    #有两类经典类 、新式类。下面形式属于经典类
    class Money:
        pass
    #英文字母首字母需要大写
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    class Money:
        pass
    print(Money)
    #输出:  class就是类,且类名是Money
    
    #根据这个类,创建(实例化)一个对象
    one = Money()
    print(one)
    print(Money)
    #输出:<__main__.Money object at 0x000001A206C59EB0>  
    #Money object 类对象   ;0x000001A206C59EB0   内存地址
    
    print(one.__class__)
    #输出:  输出它对象的类名
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    增加属性/行为的描述

    属性 VS 变量?

    定义:
    变量:可以改变的量值
    属性:基于某个对象的特征
    访问权限:
    变量:根据不同的位置,存在不同的访问权限(全局变量/局部变量)
    属性:只能通过对象来进行访问
    所以必须先找到对象,对象也是通过变量名来引用,既然是变量,也有对应的访问权限

    判断依据:是否存在宿主。有即属性,没有即变量

    对象属性

    增删改查
    增:直接通过对象,动态添加
    p.age = 18

    #1.定义一个类
    class Person:
        pass
    
    #2.根据类,创建对象
    p = Person()
    
    #3.给对象p,添加一些属性
    p.age = 18
    p.height = 180
    
    #4.验证是否有添加成功
    #print(p.age)  #输出18,即添加成功
    #输出对象p的所有属性
    print(p.__dict__)  #输出:{'age': 18, 'height': 180}
    
    p.age = 23 #再重新命名一次,就修改了
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    p.pets = ['小花','小黑']
    print(p.pets,id(p.pets))
    #输出:['小花', '小黑'] 2280659029696
    
    p.pets = [1,2]  #修改操作
    print(p.pets,id(p.pets))
    #输出:[1, 2] 2280661916992  
    #修改操作下,id地址是改变了的
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    p.pets = ['小花','小黑']
    print(p.pets,id(p.pets))
    #['小花', '小黑'] 2514722426688
    
    p.pets.append('小米') #访问操作
    print(p.pets,id(p.pets))
    #['小花', '小黑', '小米'] 2514722426688
    #访问操作不会改变ID地址
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    删除:del p.age

    p.age = 18
    del p.age
    print(p.age) #已经删除了,不存在了再打印就会报错
    
    • 1
    • 2
    • 3

    如何查看对象的所有属性:对象._ dict _
    注意:不同对象之间是不能访问对方的属性

  • 相关阅读:
    转转品牌升级,不只换了个LOGO
    openEuler embedded编译镜像报错
    shell中的条件判断
    Power BI 傻瓜入门 4. Power BI:亮点
    【String 类 常用方法详解和归类】全网最细总结
    flex实现三点骰子
    前段导出XLSX表格
    CMMI5认证哪些企业可以申请
    FCN学习笔记
    Redis 的缓存击穿,穿透,雪崩及其解决方案
  • 原文地址:https://blog.csdn.net/Sun123234/article/details/126802227