python 面向对象编程

news2024/11/27 18:40:12

在这里插入图片描述

文章目录

  • 前言
  • 如何理解面向对象编程
  • 在 python 中如何使用面向对象编程
    • 定义类
    • 创建对象
    • self
    • 添加和获取对象属性
      • 添加属性
        • 类外添加属性
        • 类中添加属性
      • 访问属性
        • 类外访问属性
        • 类中访问属性
  • 魔法方法
    • __ init __() 方法
    • __ str __()方法
    • __ del __() 方法

前言

大家好,前面我们学习了 python 的基础用法,那么从今天开始,我们将学习 python 的面向对象编程,那么什么叫做面向对象的编程呢?

面向对象编程是一种编程范式,它将数据和操作数据的方法封装在对象中,并通过对象之间的交互来实现程序的设计和实现。

在面向对象编程中,程序被组织成一组相互作用的对象,每个对象都有自己的数据和可以处理这些数据的方法。对象通过消息传递的方式进行通信,一个对象可以请求另一个对象执行特定的操作。

面向对象编程的主要特点包括:

  1. 封装(Encapsulation):将数据和操作数据的方法封装在对象中,对象对外部隐藏了内部的实现细节,只暴露必要的接口。

  2. 继承(Inheritance):通过继承机制,可以从已有的类派生新的类,并对新的类进行扩展或修改。继承可以实现代码重用和层次化设计。

  3. 多态(Polymorphism):多态允许使用统一的接口来处理不同类的对象,提高了代码的灵活性和可扩展性。不同的对象可以对同一消息做出不同的响应。

面向对象编程的优点包括代码重用性高、可维护性强、模块化程度高等。它被广泛应用于各种编程语言和领域,如Java、C++、Python等。

那么本篇我怕将带大家进入 python面向对象编程 的大门,让我们一起来看看吧。🚗🚗🚗

在这里插入图片描述

如何理解面向对象编程

举个例子:当我们手洗衣服的时候,我们需要 找盆 - 放水 - 加洗衣粉 - 浸泡 - 搓洗 - 拧干水 - 倒水 - 漂洗N次 - 拧干 - 晾晒。 但是如果我们使用洗衣机洗衣服的话,我们只需要 打开洗衣机 - 放衣服 - 加洗衣粉 - 按下开始按钮 - 晾晒。面向对象我们只需要注意对象是什么,而不必过于关心过程是什么。

总结:面向对象就是将编程当成是一个事物,对外界来说,事物是直接使用的,不用去管他内部的情况。而编程就是设置事物能够做什么事。

在 python 中如何使用面向对象编程

在 python 中实现面向对象编程依赖于类和对象,类就相当于是一张图纸,一个事物必须依靠这个图纸才能实现出一个实体,这种类创建出对象的过程也叫做实例化

定义类

在 python 中,使用 class 类名(): 来创建出一个类。并且类名通常使用大驼峰的形式。

🫥

class Washer():
    print('这是一个类')

print(type(Washer))

在这里插入图片描述

这种类中代码不在函数内部的函数在定义的时候就会执行。也就是说不管我们有没有使用这个类都会执行这个代码。

class Washer():
    print('这是一个类')

在这里插入图片描述
👹
而通常一个事物被创建出来往往会具有相应的功能,那么在类中我们定义函数使这个类具有某种功能。

class Washer():
    def wash_clothes(self):
        print('洗衣服')

print(type(Washer))

在这里插入图片描述
函数中的方法只有被调用的时候才会执行。

创建对象

当我们创建完一个类之后,我们可以使用 对象名 = 类名() 来实例化出一个对象。在实例化出一个对象之后,我们可以使用 对象名.方法 来调用该对象中的方法。

class Washer():
    def wash_clothes(self):
        print('洗衣服')

washer1 = Washer();
washer1.wash_clothes()

在这里插入图片描述

当我们直接打印类名和对象名的时候,会输出什么?

class Washer():
    def wash_clothes(self):
        print('洗衣服')

washer1 = Washer()
washer2 = Washer()
print(Washer)
print(washer1)
print(washer2)

在这里插入图片描述

当我们直接打印对象名的时候,会输出对象名的地址,并且同一个类的不同对象的地址不同。

self

细心的人可能会发现为什么函数的参数列表中会出现 self 呢?这个 self 不是我手动添加进去的,而是 python 自动补充的,这个 self 表示调用该函数的对象。

class Washer():

    hight = 100
    weight = 200
    def wash_clothes(self):
        print('洗衣服')
        print(self)

washer1 = Washer();
print(washer1)
washer1.wash_clothes()
washer2 = Washer()
print(washer2)
washer2.wash_clothes()

在这里插入图片描述

不仅如此,我们还可以在类当中使用 self.属性 来访问当前类中的属性。

class Washer():

    hight = 100
    weight = 200
    def wash_clothes(self):
        print('洗衣服')
        print(f'洗衣机的高度是{self.hight}')

washer1 = Washer()
washer1.wash_clothes()

在这里插入图片描述

添加和获取对象属性

添加属性

属性代表对象具有的特性,比如高度,重量和价格等,这些都属于对象的属性。

类外添加属性

在类外添加属性就相当于什么呢?就相当于我们买手机,当我们拿到手机的时候,我们需要自己下载应用,打造属于我们自己的手机,手机具有我们想要的属性,这就是在类外添加属性的大概意义。我们使用 对象名.属性名 = 值 来在类外添加属性。

class Washer():
    def wash_clothes(self):
        print('洗衣服')

washer1 = Washer()
washer1.hight = 100

在这里插入图片描述

类中添加属性

在类中添加属性就相当于,在工厂的时候,制作出来就有的属性,颜色啊、大小什么的,这些就是所有事物都具有的共同属性,只是具体的属性内容有区别。我们使用
属性名 = 值 来在类中添加属性。

class Washer():
    hight = 100
    weight = 500
    def wash_clothes(self):
        print('洗衣服')

washer1 = Washer()

在这里插入图片描述

访问属性

类外访问属性

在类外访问属性使用 对象名.属性

class Washer():
    def wash_clothes(self):
        print('洗衣服')

washer1 =Washer()
washer1.hight = 100
washer1.weight = 500
print(washer1.hight)  # 100
print(washer1.weight)  # 500

类中访问属性

在类中使用 self.属性 来访问属性。

class Washer():
    hight = 100
    weight = 500
    def print_info(self):
        print(f'洗衣机的高度为{self.hight},洗衣机的重量为{self.weight}')

washer1 =Washer()
washer1.print_info()

在这里插入图片描述

魔法方法

在 python 类中有很多特殊的方法,他们的格式是 __xx__() ,他们具有特殊的功能。

__ init __() 方法

__ init __() 方法是当我们实例化出一个对象的时候自动调用的方法,不需要我们手动调用,通常用于给对象的属性赋值或者添加属性。

class Washer():
    def __init__(self):
        self.hight = 100
        self.weight = 500

washer1 = Washer()
print(washer1.hight)  # 100
print(washer1.weight)  # 500

__ init __ 方法也可以传进去参数,用来给对象属性赋值等作用。

class Washer():
    hight = 0
    weight = 0
    def __init__(self,hight,weight):
        self.hight = hight
        self.weight = weight

washer1 = Washer(100,500)
print(washer1.hight)  # 100
print(washer1.weight)  # 500

__ str __()方法

当我们直接使用 print() 函数打印对象名的时候,会输出该对象的地址,但是当我们类中存在 __ str __() 方法的时候,使用 print(对象名) 的时候,输出的是 __ str __() 中return的数据。

class Washer():
    def __str__(self):
        return '这是一个洗衣机'

washer1 = Washer()
print(washer1)

在这里插入图片描述

__ del __() 方法

当我们删除对象的时候,如果该对象中存在 __ del __() 方法的时候,会默认执行盖房啊中的内容。但是实际上,当我们不手动删除对象的时候,也会执行该方法,因为当我们的程序执行完成之后,对象就不会被使用了,会被删除掉。

class Washer():
    def __del__(self):
        print(f'{self}对象已被删除')

washer1 = Washer()
del washer1

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

吐血整理,自动化测试Yaml框架配置文件-深入详解(超细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 YAML详解 YAML它…

上位机智能通信统一解决方案OPC应用

上位机应用开发中的通信需求 通信过程/通信协议多样性 通信统一化处理方案:OPC(Open Platform Communications)、OPC UA(OPC Unified Architecture) 基于西门子1500PLC的OPC服务器对接 internal class Program{stati…

BTP Integration Suite学习笔记 - (Unit1) Developing with SAP Integration Suite

今天决定跟着SAP官方资源系统学习一遍BTP Itegration Suite。找到两个Learning Journey: SAP Integration Suite Foundation 和 Solution Integration on SAP BTP。还有一个更大的roadmap,Integration Suite的官方内容在这里都可以链接到。 认证暂时只找到了一个比较基础的&…

干撸Spring,太难了!阿里P8级别「Spring源码全解析」带你起飞

有朋友跟我反映说,最近想详细学习Spring源码,可网上查到的文章都很一般,有没有大牛分享自己Spring实践与源码结合的方法? 干撸Spring,太难了!难到你不知道从哪下手! 为什么 Spring 天天用&…

云和DevOps如何帮助加速数字化转型?

1.云和 DevOps:概述 数字化转型已成为寻求在现代时代蓬勃发展的企业的一项关键举措。为了加速这一转型,组织正在利用云计算的力量并采用DevOps实践。云计算提供可扩展且灵活的基础架构,而 DevOps 则支持协作和持续交付的文化。本文将探讨云和…

ETHERCAT转PROFIBUS网关连接ethercat网线接口定义

远创智控YC-DP-ECT,是自主研发的一款PROFIBUS从站功能的通讯网关,它的主要功能是将ETHERCAT设备接入到PROFIBUS网络中。 YC-DP-ECT这个小小的网关可不简单, 连接到PROFIBUS总线中做为从站使用,连接到ETHERCAT总线中做为从站使用…

实现企业安全云转型的思考

如今大部分企业都在开展数字化数字化转型,云计算一直在其中起着主导地位,因而组织面临着双重挑战:如何将业务无缝迁移至云上,并确保这种转型的安全。 虽然云的使用保证了可扩展性、成本效率和生产力的提高,但上云过程…

【C++顺序容器】deque的成员函数和非成员函数

目录 deque 1. deque的成员函数 1.1 构造、析构和赋值运算符重载 1.1.1 构造函数 1.1.2 析构函数 1.1.3 赋值运算符重载 1.2 迭代器 1.3 容量 1.4 元素访问 1.4.1 遍历方法 1.5 修改器 1.6 空间配置器 2. deque的非成员函数 deque deque(通常发音为 &…

告别VLAN孤岛,两招让你轻松实现互访

实际网络中,经常会有VLAN之间互访的需求。 很多网工通常会选择一些方法,来实现不同VLAN间主机的相互访问,比如说Vlanif、单臂路由。 今天就教你轻松实现VLAN间互访。 01-通过子接口实现 VLAN 间的互访 在二层交换环境下,一个VLA…

线程是什么

目录 一、教材观点 二、简述进程是如何运行的 简述进程切换原理: 三、线程是什么 线程底层是如何被管理的 四、重讲线程概念理解 一、教材观点 教材观点: 线程是一个执行分支,执行分支更细,调度成本更低。线程是进程内部的…

Android SystemServer 启动流程分析

和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、SystemServer 启动的服务有哪些二、SystemServer启动总体流程概述三、SystemServer 如何启动,是谁启动的?四、 SystemServe…

解决哈希冲突

1、HashMap引入了链式寻址法来解决hash冲突,冲突的key,HashMap把这些key组成一个单向链表,然后采用尾插法把key保存到链表的尾部。 使用二次扰动函数(hash函数)来降低哈希冲突的概率,使数据平均分布。 pu…

【VUE】Unterminated template literal:拼接字符串包括<script></script>时报错误

vue拼接字符串包括时报错误提示Unterminated template literal vue拼接字符串包括script标签时报错误提示Unterminated template literal解决方法加反斜杠就可以&#xff0c;在script结束标签里边加反斜杠<\/script> 代码 htmlData: <div id"b0e5c00cc51e4a4…

svg图标颜色随父元素变换

给svg加上一下样式 fill: currentColor;注&#xff1a;为什么有的svg设置了fill: currentColor;还是一样不生效&#xff1f; 用电脑自带的txt或者代码开发工具&#xff08;如&#xff1a;HbuilderX&#xff09;打开svg文件 全局搜索 fill 把fill指定颜色去掉 保存就OK了

存储函数,存储过程的应用

查看触发器 mysql> show triggers \G *************************** 1. row ***************************Trigger: student_insert_triggerEvent: INSERTTable: studentStatement: BEGINupdate student_total set totaltotal1;ENDTiming: AFTERCreated: 2023-07-11 16:13:51…

msvcp71.dll丢失怎样修复,msvcp71.dll丢失的三个解决方法

在运行游戏&#xff0c;软件程序的时候&#xff0c;电脑提示msvcp71.dll丢失怎样修复&#xff1f;下面小编就开始介绍msvcp71.dll在电脑系统中的的目录&#xff0c;作用&#xff0c;以及丢失后三个解决方法。 目录 msvcp71.dll通常位于系统目录里&#xff1a; msvcp71.dll丢失…

本地git 提交代码时 报错 [session-4d40e187] Access denied

1、首先执行以下命令查看本地是否绑定仓库 git remote -v2、如果没有执行以下命令添加 git remote add name(仓库名) git地址 // 添加成功后执行git remote -v 检查3、提交代码到新仓库&#xff0c;执行以下代码即可 git add . git commit -m fix:init git push name(于第二…

有趣的命令——————用shell脚本实现(石头剪刀布)小游戏

vim games。sh 输入以下内容&#xff1a;#!/bin/bash echo "这是一个小游戏(石头0 剪刀1 布2)&#xff0c;放松一下:" pc$(expr $RANDOM % 3) read -p "请输入你的选择:" user if [ $pc -eq 0 -a $user -eq 2 ] || [ $pc -eq 1 -a $user -eq 0 ] || [ $pc …

单个电源模块带电感的直流压降仿真(三)

单个电源模块带电感的直流压降仿真(三) 接单个电源模块带电感的直流压降仿真(二) 设置负载Sink,按照向导逐步设置

C++好难(9):C++的多态

目录 1.多态的概念 2.多态的定义及实现&#xff1a; &#x1f349;多态的构成条件 &#x1f349;虚函数 &#x1f349;虚函数的重写 &#x1f349;虚函数重写的三个例外 &#x1f352;子类虚函数可以不加vector &#x1f352;析构函数的重写 &#x1f352;协变&#xf…