当前位置: 首页 > news >正文

【面向对象编程1】——类和对象——如桃花来

目录索引

  • ==面向过程和面向对象的区别:==
    • 面向过程:
    • 面向对象:
    • 总结:
  • ==类和对象:==
    • 定义类:
      • 语法:
    • 创建对象:
    • 实例演示:
  • ==魔法方法:==
    • __init __方法:
    • __ del __方法:

面向过程和面向对象的区别:

面向过程:

需要实现一个功能时候,看中的是开发的步骤和过程,每一个步骤都需要自己亲力亲为,需要自己编写代码。我们可以理解为,我们需要详细的规划每一个步骤。

比如我们清扫一个三层房间,
每一层用扫把怎么扫、
从哪里扫、
先从哪层开始扫。
每一个步骤我们都需要详细考虑

面向对象:

需要实现一个功能的时候,看中的不是开发的步骤和过程,而是关心谁去做。相当于我们不需要考虑具体怎么去做,而是考虑我们用这个对象达成什么目的即可。

还是上面那个例子,
如果我们有三个机器人,
机器人A去打扫第一层,
B去打扫第二层,
C去打扫第三层。
我们不需要考虑具体怎么扫地,
只需要管理哪个机器人去扫就可以了,
这就是面向对象。

总结:

面向对象和面向过程,是两种编程思想。编程思想是指同一个问题,用不同的视角去解决问题。

  • 面向过程: 注重过程,实现的细节,亲力亲为。
  • 面向对象: 关注的是结果,当然了。面向对象的底层逻辑还是面向过程。只不过我们从一个较为宏观的角度去看待问题了。

类和对象:

  • 类是一系列具有相同特征和行为的事物的统称,是一个抽象的概念,不是真实存在的事物
  • 属性:特征,通常定义在init方法中
  • 方法:行为,python中以函数的方式来执行行为

用人话来讲述什么是类:

封装代码的是函数,那么封装函数的就是类。函数里面有好几个代码。类里面也有好几个类。

举例:
设计机器人类:
类名:Robot
属性:名字、颜色、身高
方法:问好、烧饭、跑步

类和对象的关系:

用类去创建一个或多个对象: 类是一个比较抽象的概念,就像机器人类很抽象。而对象是比较具体的概念,比如说阿尔法狗、chatgpt,也是个机器人它们就是个对象,非常具体。

类就相当于图纸,对象相当于图纸生产出来的具体的产品,而这个对象会运用方法去实现对应的功能。

定义类:

语法:

#类名的第一个字母通常要大写
class 类名():代码...

创建对象:

语法:

对象名.类名()

实例演示:

#创建一个机器人类
#所有类都默认继承object原始类
class Robot(object):"""# self 指的是调用该函数的对象#由于打印对象和打印self得到的内存地址相同,所以self指的是调用该函数的对象"""#类内的方法基本都带有self参数def run(self):print("我正在执行跑步")print(id(self))if __name__ == '__main__':#机器人aerfa是创建的一个实例对象aerfa = Robot()aerfa.run()print(id(aerfa))

魔法方法:

在Python里面,两个下划线开头 两个下划线结束的这类方法叫做魔法方法,指的是具有特殊功能的函数

__init __方法:

  • 这个魔法方法,在创建一个对象时会默认被调用,只要实例化一个对象就会自动调用,不需要手动调用。
  • init里面的self参数,不需要开发者传递,解释器会自动传递。
  • 属性一般都写在init函数里面,init里面有多少参数,实例化对象的时候就要传入多少参数。

__ del __方法:

#创建一个机器人类
#所有类都默认继承object原始类
class Robot(object):"""# self 指的是调用该函数的对象#由于打印对象和打印self得到的内存地址相同,所以self指的是调用该函数的对象"""#类内的方法基本都带有self参数def __init__(self,name,age,sex):# 初始化方法,在实例化时会自动调用self.name = nameself.age = ageself.sex = sexdef __del__(self):#析构函数,当删除实例的时候,就会自动调用此方法#通过del关键字用来删除实例对象print(f"{self.name}被析构了")def run(self):print("我正在执行跑步")if __name__ == '__main__':#机器人aerfa是创建的一个实例对象aerfa = Robot("dog",18,"ta")#可通过对象.属性直接拿出属性print(aerfa.name)del aerfa# name 'aerfa' is not definedprint(aerfa.age)
http://www.lryc.cn/news/91261.html

相关文章:

  • chat聊天系统消息消费时遇到的问题及优化思路(二)
  • js正则中的match()
  • Apache 配置和应用
  • 实现PyTorch/ONNX自定义节点操作的TensorRT部署
  • Shamir 秘密共享、GMW和BGW方案
  • Day56【动态规划】583.两个字符串的删除操作、72.编辑距离
  • Arnold图像置乱的MATLAB实现
  • ASP.NET Core
  • javascript基础二十二:举例说明你对尾递归的理解,有哪些应用场景
  • hive中如何计算字符串中表达式
  • 如何将maven项目改为springboot项目?
  • Java与查找算法(5):哈希查找
  • Vercel部署个人博客
  • 【论文阅读】An Object SLAM Framework for Association, Mapping, and High-Level Tasks
  • 《metasploit渗透测试魔鬼训练营》学习笔记第六章--客户端渗透
  • 华为OD机试真题 Java 实现【Linux 发行版的数量】【2023Q1 100分】
  • VMware ESXi 8.0U1a macOS Unlocker OEM BIOS (标准版和厂商定制版)
  • Effective STL_读书笔记
  • 通过yum:mysql5.6-msyql5.7-mysql8.0升级之路
  • C语言数据存储 — 整型篇
  • 高级Excel功能教程_编程入门自学教程_菜鸟教程-免费教程分享
  • ChatGPT会取代低代码开发平台吗?
  • Linux :: 文件内容操作【5】:echo 指令 与 输入重定向、输出重定向、追加重定向在文件内容写入中的简单用法!
  • 【RocketMQ】重试机制及死信消息处理
  • Mysql DDL执行方式-pt-osc介绍 | 京东云技术团队
  • C++ stack容器介绍
  • 在 Git 中撤消更改的 6 种方法!
  • LiveGBS国标GB/T28181国标平台功能-电子地图移动位置订阅mobileposition地图定位GPS轨迹坐标位置获取redis获取位置
  • 编程(38)----------计算机的部分原理
  • 若依框架快速搭建(二)