PYTHON进阶-面向对象编程

news2024/11/30 0:47:13

 

 🌈write in front🌈
🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流.
🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如需转载还请通知⚠️
📝个人主页:Aileen_0v0🧸—CSDN博客
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​
📣系列专栏:Aileen_0v0🧸的PYTHON学习系列专栏——CSDN博客
🗼我的格言:"没有罗马,那就自己创造罗马~" 

 

目录

面向对象的介绍🫧

添加和获取对象属性🔅

1.类外 - 添加和获取对象属性🍬

2.类内 - 获取对象属性🍭

魔法方法 __init__🪄

带参数的__init__方法🧸

魔法方法__str__🪄

魔法方法__del__🪄


面向对象的介绍🫧

面向对象编程(Object-Oriented Programming,简称OOP)是一种程序设计思想,它将数据和处理数据的方法组合成一个类(Class),并通过实例化(Instantiation)这个类来创建对象(Object)。这些对象可以互相协作,通过消息传递(Message Passing)来完成程序的功能。

这样做的好处是,它使程序更加模块化、易于维护和扩展,提高了代码的复用性和可读性。

通俗地讲,面向对象就是将编程当成是一个事务,对外界来说,事务是直接使用的,不用去管它内部的情况.而编程就是设置事物能够做什么事.就像是洗衣机洗衣服一样,我们不需要知道它怎么洗的我们只需要用它做我们想做的事情例如洗衣服,烘干,脱水这些功能即可.

面向对象过程中,有两个重要组成部分: 类 和 对象.

洗衣机就是我们要使用的对象,它的图纸就是类,我们需要通过 类(图纸) 去创建 对象(洗衣机).

用类创建对象的过程也叫做实例化---->平时我们都叫做 实例化~

1.1定义类 的 语法:

class 类名():
    代码
    ......

类名遵循大驼峰命名习惯.

1.2创建对象(对象又名实例) 的 语法:

先有类名再有对象名

对象名 = 类名()

体验类和对象 

#需求 : 洗衣机. 功能: 能洗衣服
# 1. 定义洗衣机类
"""
class 类名():
    代码
"""

class Washer():
    def wash(self):
        print("能洗衣服")

# 2. 创建对象--->先有类名再有对象
# 对象名 = 类名()
haier = Washer()

# 3. 验证成果
# 打印 haier 对象
print(haier)

# 使用 wash功能 -实例方法/对象方法  -- 对象名.Wash()
haier.wash()

self是什么?让我们通过打印它的内存地址来观察一下 

#类里的self---指的是调用该函数的对象
#类:洗衣机 功能:洗衣服
class Washer:
    def wash(self):
        print("能洗衣服")
        print(self)

#利用类实例化对象
haier = Washer()
print(haier)#打印haier这个对象的内存地址

haier.wash()
#由于打印对象和打印self得到的内存地址相同.
# 所以self指的是调用该函数的对象---即haier

 

验证一个类是否可有多个对象,对象调用内存地址时,self地址是否相同 

# 实验:1. 一个类可以创建多个对象; 2. 多个对象都调用函数的时候,self地址是否相同`
class Washer():
    def wash(self):
        print("洗衣服")
        print(self)

#创建对象-类名()
haier1 = Washer()
haier1.wash()

# 实验:1. 一个类可以创建多个对象; 2. 多个对象都调用函数的时候,self地址是否相同`
class Washer():
    def wash(self):
        print("洗衣服")
        print(self)

#创建对象1-类名()
haier1 = Washer()
haier1.wash()

#创建对象2-类名()
haier2 = Washer()
haier2.wash()

结论:一个类可以创建多个对象,且每个对象的内存地址截然不同 


添加和获取对象属性🔅

1.类外 - 添加和获取对象属性🍬

#添加和获取对象属性
#属性即特征 --- 宽度,高度,质量等
#类 外面添加对象属性    语法: 对象名.属性名  = 值
class Washer():
    def wash(self):
        print("能洗衣服")

#创建对象
haier1 = Washer()

#类外添加对象属性
#给对象添加属性  对象名.属性名 = 值
haier1.width = 500
haier1.height = 800

#获取属性  对象名.属性名
print(f"洗衣机的宽度是{haier1.width}")
print(f"洗衣机的高度是{haier1.height}")

2.类内 - 获取对象属性🍭

#属性即特征 --- 宽度,高度,质量等
#类 添加对象属性    语法: 对象名.属性名  = 值
class Washer():
    def wash(self):
        print("能洗衣服")

    # 定义一个函数获取实例属性
    def print_info(self):
        # 类内获取对象属性 --- self.属性名
        #print(self.width)
        print(f"洗衣机的宽度是{self.width}")
        print(f"洗衣机的高度是{self.height}")

#创建对象
haier1 = Washer()

#给对象添加属性  对象名.属性名 = 值
haier1.width = 500
haier1.height = 800

#对象调用实例方法
haier1.print_info()

魔法方法 __init__🪄

因为洗衣机在没有使用之前它就具有,高度,宽度这些属性,我们可以在生产过程中就赋予这些属性.

(在创建洗衣机对象之前它就有这些属性,所以这些属性是在类里面)

魔法方法__init__是Python类中的一个魔法方法,用于在创建类的实例对象时进行初始化操作。通俗的来讲,就是在一个类中定义了__init__方法,当你创建这个类的实例对象时,Python会自动调用这个方法进行初始化操作,对对象的各个属性进行赋值或者其他操作。

类似于生产一个产品的时候,要对产品进行初始化,比如给它设置一些属性、赋予一些特定的功能等等。

我们可以利用 __init__()方法

__init__()方法的作用: 初始化对象---无需手动调用

#目标: 定义init魔法方法设置初始化属性 并访问调用
"""
1.定义类
    init魔法方法: width 和 height
    添加实例方法: 访问实例属性

2. 创建对象
3. 验证成果
    调用实例方法
"""

class Washer():
    def __init__(self):#__init__()方法的作用 : 初始化对象
        #添加实例属性
        self.width = 500
        self.height = 800

        #实例方法
    def print_info(self):
        #类里面调用实例属性
        print(f"洗衣机的宽度是{self.width}")
        print(f"洗衣机的高度是{self.height}")

#创建对象(实例化)
haier = Washer()

#当对象调用实例方法时才能打印出对应魔法方法里面设定的属性值
haier.print_info()

注意:

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

__init__(self)中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用(即对象名)传递过去

在类外给对象添加的属性与使用魔法函数添加的属性之间有几个区别:

  1. 范围不同:在类外部添加属性,它们只被添加到特定实例中,在整个类和其他实例中是不可见的。而使用魔法函数,添加的属性是与类相关的,因此它们在整个类和所有实例中都可见。

  2. 方法不同:在类外部添加属性,可以使用点运算符或者直接赋值的方式添加属性。而使用魔法函数,需要按照特定的格式编写函数,才能正确地添加属性。

  3. 继承不同:在类外部添加属性,对子类的影响通常是有限的。而使用魔法函数,可以添加到类的整个继承层次结构中,从而影响所有子类。

  4. 命名不同:在类外部添加属性时,可以使用任何有效的变量名。而使用魔法函数命名属性时,需要按照特定的格式命名,以避免与其他属性冲突。

总之,虽然两种方法都可以添加属性,但它们在范围、方法、继承和命名等方面有所不同,需要根据具体的使用场景进行选择。

 


带参数的__init__方法🧸

一个类创建多个对象,且每个对象具有不同的属性值

带参数的__init__方法是在定义类时设置的一种方法,它允许我们在创建对象时传入参数,从而初始化对象的属性或执行特定的操作。这样可以使得对象具有更灵活的属性和行为,更好地满足各种需求

# 1. 定义类: 带参数的init: 宽度和高度;
class Washer():
    def __init__(self,width,height):
        self.width = width
        self.height = height

    #实例方法: 调用实例属性
    def print_info(self):
        print(f"洗衣机的宽度是{self.width},高度是{self.height}")

# 2. 创建对象. 创建多个对象属性值不同; 然后调用它的实例方法
haier1 = Washer(10,20)
haier1.print_info()

#对象2:haier2
haier2 = Washer(100,200)
haier2.print_info()


魔法方法__str__🪄

 当使用 print 输出对象的时候, 系统会自动默认打印出对象的内存地址.

若果 定义了 __str__ 方法,那么当我们 print(对象) 的时候 就会打印出从这个方法中 return 的数据.

所以魔法方法 __str__ 的作用就是: 返回类的作用或对象的状态

未定义魔法方法__str__,直接打印对象haier 

class Washer():
    def __init__(self,width,height):
        self.width = width
        self.height = height

    def print_info(self):
        print(f"这个洗衣机的宽度是{self.width},高度是{self.height}")


haier = Washer(100,200)
haier.print_info()
print(haier)

 

定义了魔法方法 __str__ 然后return了 "类的说明或对象状态的说明."

class Washer():
    def __init__(self,width,height):
        self.width = width
        self.height = height

    def print_info(self):
        print(f"这个洗衣机的宽度是{self.width},高度是{self.height}")

    def __str__(self):
        return "这个洗衣机出现故障"

haier = Washer(100,200)
haier.print_info()
print(haier)


魔法方法__del__🪄

 作用:用于删除对象

class Washer():
    def __init__(self):
        self.width = 300

    def __del__(self):
        print("对象已删除")

haier = Washer()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1095922.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Java的家电销售网站管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域…

C++位图和布隆过滤器

📟作者主页:慢热的陕西人 🌴专栏链接:C 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 本博客主要内容介绍C中的位图和布隆过滤器模拟实现和简单的应用 文章目录 …

求直角三角形第三点的坐标

文章目录 求直角三角形第三点的坐标1. 原理2. 数学公式3. 推导过程 求直角三角形第三点的坐标 1. 原理 已知内容有: P1、P2 两点的坐标; dis1 为 P1与P2两点之间的距离; dis2 为 P2与P3两点之间的距离; 求解: …

10、网络防火墙的设置

1、查看防火墙是否开启 systemctl status firewalld 此图表示防火墙已开启,如果未开启可使用systemctl start firewalld开启 2、查看已开启的端口 firewall-cmd --list-ports 默认无打开的端口 3、打开80端口 firewall-cmd --zonepublic --add-port80/tcp --p…

stm32备份

存储器的分类: 存储器首先根据断电后存储的数据是否会丢失,可以分为易失存储器和非易失存储器,易失存储器主要应用于内存,非易失存储器主要用于外存。 易失存储器以RAM随机存储器为代表,随机的含义是存储器中的数据读取…

EfficientDet: Scalable and Efficient Object Detection

CVPR2020 V7 Mon, 27 Jul 2020 引用量:243 机构:Google 贡献:1>提出了多尺度融合网络BiFPN 2>对backbone、feature network、box/class prediction network and resolution进行复合放缩,有着不同的…

Linux第4章-目录结构

引子 在Linux中,一切皆文件!!! 在Linux中,一切皆文件!!! 在Linux中,一切皆文件!!! 基本介绍 1.Linux的文件系统,是采用…

LoRA 是如何工作的?

概述 纯笔记 LoRA的原理 LoRA其实是对稳定扩散模型最关键的部分进行了微小的改变。 这个关键的部分叫:cross-attention layers – 交叉注意力层。 研究人员发现,对这关键部分进行微调就足以实现良好的训练。 上面黄色部分,QKV 部分就是&a…

Python进阶之迭代器

文章目录 前言一、迭代器介绍及作用1.可迭代对象2. 迭代器 二、常用函数和迭代器1.常用函数2.迭代器 三、总结结束语 💂 个人主页:风间琉璃🤟 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主💬 如果文章对你有帮助、欢迎关注…

ELK 日志分析系统介绍与部署

目录 一、ELK 简介: 1.开源工具介绍: 2.其它组件: 2.1 Filebeat: 2.2 Fluentd: 2.3 缓存/消息队列(redis、kafka、RabbitMQ等): 3. filebeat 结合 logstash 带来好处: 二、为什么要…

zookeeper源码学习笔记(一)

一、缘起 1、CP还是AP 作为一个在大数据行业工作了7~8年的老兵,在被问到zookeeper和CAP时,竟然有些恍惚,AP还是CP? 看了一些博文,答案几乎都是CP? zookeeper的实现中,P是一定的&…

【C语言】.c源文件从编译到链接生成可执行程序的过程

本篇文章目录 1. 过程概览2. 编译与链接2.1 预编译/预处理2.2 编译2.3 汇编2.4 链接 3. 执行/运行环境 1. 过程概览 编译到链接是c语言的翻译环境,c语言还有执行环境。 组成一个程序的每个源文件通过编译过程分别转换成目标代码(object code)…

推荐《一拳超人》

《一拳超人》是ONE原作,村田雄介作画,连载于网络漫画杂志《邻座的Young jump》上的漫画。 [1] 原为ONE在个人网站上连载的练笔之作, [2] 后被喜爱该作的另一漫画家村田雄介在征得ONE同意后重新绘制而成。 简体中文电子版由哔哩哔哩漫画发布…

JavaSE学习值之--认识异常

💕"有效知识的前提是承认知识边界,承认我们对边界那边的一切无可奉告。"💕 作者:Mylvzi 文章主要内容:JavaSE学习值之--认识异常 一.什么是异常? 异常就是程序在运行的时候产生的不正常的行为 …

java_Stream API

文章目录 一、Stream API vs 集合二、Stream 使用的执行流程2.1、创建Stream2.1、中间操作2.1.1. filter2.1.2. limit2.1.3. skip2.1.4. distinct2.1.5. map2.1.6. sorted 一、Stream API vs 集合 Stream API 关注的是多个数据的计算(排序、查找、过滤、映射、遍历…

网络工程师知识点4

51、OSPF的LSA类型 52虚链路:作用 解决区域划分不合理的问题 通过建立虚拟链路来实现一般区域与骨干区域的理论化直连 54、NSSA区域的特点 1、可以学习本区域连接的外部路由 2、不学习其他区域转发进来的外部路由 3、与外部区域通信使用ABR自动产生的默认路…

python:爬取网络小说,看这一篇就够了

说明: 本教程仅供于学习研究使用,请勿用于其他用途。 软件安装: 官网下载visual studio Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器 (microsoft.com) 点进网页后下拉找到个人免费版本。点击下载即可。 1:找到…

第六章:TF-A学习

TF-A学习 TF-A初探如何获取系统源码移植过程中遇到的问题和解决方案编译报错:arm-none-linux-gnueabi-gcc: not foundTF-A 源码打补丁 遇到assume -R?[n] TF-A初探 为了保证安全 ARM 推出了 Arm Trusted Firmware 的可信固件,简称 TF-A。它…

windows环境cmake的nmake failed

windows环境cmake异常 问题如下: > cmake ..CMake Error at CMakeLists.txt:4 (PROJECT): Running nmake -?failed with:系统找不到指定的文件。CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage CMake Error: CMAKE_CXX_COMPILER not set, after…

中断机制-interrupt和isInterrupted源码分析、中断协商案例

当前线程的中断标识为true,是不是线程就立刻停止? 答案是不立刻停止,具体来说,当对一个线程,调用interrupt时: 如果线程处于正常活动状态,那么会将该线程的中断标志设置为true,仅此…