Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Python面向对象之为何要用类

Python面向对象之为何要用类

原创
作者头像
我叫什么好
发布于 2022-01-07 13:17:44
发布于 2022-01-07 13:17:44
60700
代码可运行
举报
文章被收录于专栏:Python1.0Python1.0
运行总次数:0
代码可运行

  对于非程序员科班出身的技术人员,理解很多开发思想领域里面的事情,其实是一件挺痛苦的事情,直到接触到了Python当中的类,我才明白了什么是面向对象,更多的理解还是要通过实际的代码操练才能够慢慢的掌握。

今天记录一下什么是面向对象,在Python的编程世界里为什么要用到类。

一、面向对象

  将大家共有的特性剥离出来进行抽象的过程就是面向对象,这是我对面向对象最直观的理解,例如我们在工厂生产汽车,每一款车都有自己的生产平台,试想一下这样的场景,A款车有100个工人在独立生产,其中20个人生产底盘,20个人研发发动机,40个人制作车架、车门,20个人负责最终的车辆组装,B款车同样有100个人干着和A款车相同的事情,如果世界是这个样子,丰田、大众也早就倒闭了,不管是任何车型,虽然每款车都有自己独立的生产平台,但是很多东西一定是具备相同属性的,例如发动机、方向盘、车座、轮胎,在小到螺丝帽等等,我们可以将这些共有的东西完全独立出来,变成每款车型的共有属性,那么100个工人可能有50个人都是负责公共部分的,节省了人力成本的同时,也节省了资源成本,例如我们要对座椅的尺寸进行调整,那么仅需要对这50个人的工作内容进行调整即可,而不需要对每款车进行独立的操作,这就是面向对象为我们带来的好处。

二、Python中的面向对象——类

  简单的举例了面向对象的生产场景,我们再通过Python中函数式编程和类编程来对比各自的特点。

  例如有一个简单的需求,就是开发一个邮件客户端程序,可以通过程序,自定义的发送我们想要发送的内容。

1、函数式编程

伪代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def send_mail(to_user, title, content):
    smtp_host = "mail.test1.com"
    smtp_username = "test_user1"
    smtp_password = "test_password1"
    smtp_obj = smtplib.SMTP(smtp_host, smtp_username, smtp_password)
    smtp_obj.sendmail(to_user, title, content)

send_mail("user@test.com", "test_mail", "test_content")

  我们通过上述伪代码简单实现了邮件发送的需求,但如果想让更多的人来使用使用这个功能,就会遇到一些问题,例如大家的smtp、用户口令都不一样,我们就要改造代码变成下面的样子。

伪代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def send_mail(smtp_host, smtp_username, smtp_password, to_user, title, content):
    smtp_obj = smtplib.SMTP(smtp_host, smtp_username, smtp_password)
    smtp_obj.sendmail(to_user, title, content)

send_mail("mail.test1.com", "test_user1", "test_password1", "user@test1.com", "test_mail", "test_content")
send_mail("mail.test2.com", "test_user2", "test_password2", "user@test2.com", "test_mail", "test_content")
send_mail("mail.test3.com", "test_user3", "test_password3", "user@test3.com", "test_mail", "test_content")

  我们又通过上述方式实现了多人发送的功能,程序写到这里看起来貌似还没什么问题,但如果此时我们的程序需求又增加了,例如不只是发邮件了,同时要有接收、删除、等等功能,我们的代码又变成下面的样子。

伪代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def send_mail(smtp_host, smtp_username, smtp_password, to_user, title, content):
    smtp_obj = smtplib.SMTP(smtp_host, smtp_username, smtp_password)
    smtp_obj.sendmail(to_user, title, content)
    
def recv_mail(smtp_host, smtp_username, smtp_password)
    smtp_obj = smtplib.SMTP(smtp_host, smtp_username, smtp_password)

mail 接收代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def delete_mail(smtp_host, smtp_username, smtp_password)
    smtp_obj = smtplib.SMTP(smtp_host, smtp_username, smtp_password)

mail 删除功能

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
send_mail("mail.test1.com", "test_user1", "test_password1", "user@test1.com", "test_mail", "test_content")
recv_mail("mail.test1.com", "test_user1", "test_password1", recv_argv, ...)
delete_mail("mail.test1.com", "test_user1", "test_password1", delete_argv, ...)

  我们看仅一个用户想要实现三个功能时,就需要写这么多代码,此时代码显的就有些累赘了,更致命的是如果smtp的地址变了,我要把每个功能函数的传递参数都要改一遍,这显然增加了工作成本和错误出现的几率,但我们发现每一项功能都有几个共同的属性,就是smtp地址,smtp用户,smtp密码,我们完全可以将这三个属性进行独立,通过类的封装特性来实现,即下面的面向对象式编程。

2、面向对象式编程

  Python当中通过创建类,就可以很好的实现面向对象的编程思想,同样是上面邮件发送程序,我们来用类的方式实现。

伪代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class MailTools:
    def __init__(self, smtp_host, smtp_username, smtp_password):
        self.smtp_host = smtp_host
        self.smtp_username = smtp_username
        self.smtp_password = smtp_password
        self.smtp_obj = smtplib.SMTP(smtp_host, smtp_username, smtp_password)   

发送邮件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    def send_mail(self, to_user, title, content):
        self.smtp_obj.sendmail(to_user, title, content)   

接收邮件

def recv_mail(self, recv_argv, ...)

mail 接收代码

删除邮件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    def delete_mail(self, delete_argv, ...)

mail 删除代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
test_mail = MailTools("mail.test1.com", "test_user1", "test_password1")
test_mail.send_mail(...)
test_mail.recv_mail(...)
test_mail.delete_mail(...)

  我们通过上述类代码的方式,创建了对象test_mail,然后调用它下面的send_mail、recv_mail方法等,这样的方式使得我们的代码逻辑更加清晰,如果smtp参数发生改变时,我们也仅需要修改对象实例化时的参数即可。

  在实现简单功能时我们使用函数式编程,因为它足够简单、快速,但随着程序功能的不断升级、提供多个复杂逻辑操作时,函数式变成就显的不那么好用了,因此针对不同的代码场景,我们要用好Python中的编程方式。

Python中类的知识点:

1、"__init__" 方法为Python中的构造方法,用于初始化我们的类,也就是初始化我们希望的共有属性,同时构造方法中可以执行该类中其他的函数。

2、self是一个形式参数,为该类的实例化对象,例如 a = My_Class() 中,可以理解a就是self参数。

3、创建对象时,类的后面需要加括号,即完成类的实例化,同时Python会自动查找该类中的构造方法。

4、类中如果定义了多个功能函数,那么这些函数可以称之为该类实例化对象所拥有的方法。

5、面向对象式编程的三大特性:封装、继承、多态

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python+Pytest+Allure+Json 最全Api自动化框架之邮件发送功能
Python+Pytest+Allure+Json 最全Api自动化框架 分享后,受到许多小伙伴的关注,最近一直在完善这个 API 自动化框架的功能,准备在框架成熟后分享给更多需要的小伙伴们。
Wu_Candy
2022/07/04
1K0
Python+Pytest+Allure+Json 最全Api自动化框架之邮件发送功能
Python3实现自动发送邮件
首先了解SMTP(简单邮件传输协议),邮件传送代理程序使用SMTP协议来发送电邮到接收者的邮件服务器。SMTP协议只能用来发送邮件,不能用来接收邮件,而大多数的邮件发送服务器都是使用SMTP协议。SMTP协议的默认TCP端口号是25。
用户9925864
2022/07/27
3240
Python3实现自动发送邮件
Python爬虫小技巧| Email提醒功能
大家可能都知道STMP这个协议,这个协议是用于发送邮件,很多语言都支持此协议,Python内置也是对SMTP支持的,可以发送纯文本邮件、HTML邮件以及带附件的邮件。在Python爬虫的开发中Email有啥用呢?Email主要起的是提醒作用,在我们爬虫运行的时候可能会遇到异常或者服务器方面的问题,我们可以通过邮件的形式来及时通知我们,我们再去进行处理。
Python进击者
2019/07/19
9140
Python爬虫小技巧| Email提醒功能
python接口自动化(三十二)--Python发送邮件(常见四种邮件内容)番外篇——上(详解)
  本篇文章与前边没有多大关联,就是对前边有关发邮件的总结和梳理。在写脚本时,放到后台运行,想知道执行情况,会通过邮件、SMS(短信)、飞信、微信等方式通知管理员,用的最多的是邮件。在linux下,Shell脚本发送邮件告警是件很简单的事,有现成的邮
北京-宏哥
2019/09/11
2.2K0
python接口自动化(三十二)--Python发送邮件(常见四种邮件内容)番外篇——上(详解)
Python3 使用smtplib和em
SMTP (Simple Mail Transfer Protocol)   邮件传送代理 (Mail Transfer Agent,MTA) 程序使用SMTP协议来发送电邮到接收者的邮件服务器。SMTP协议只能用来发送邮件,不能用来接收邮件。大多数的邮件发送服务器 (Outgoing Mail Server) 都是使用SMTP协议。SMTP协议的默认TCP端口号是25。
py3study
2020/01/03
5190
Python实现对Tomcat的监控
最近发现tomcat经常会僵死。而PS查看进程的时候进程还在。但不提供服务了。程序的功能:定期对tomcat服务器发送指命,如果得到响应,则服务器正常,否则异常,同时发邮件给相关人员。
py3study
2020/01/10
9320
python发送邮件
1 # -*- coding: UTF-8 -*- 2 ''' 3 发送txt文本邮件 4 http://www.cnblogs.com/liu-ke 5 ''' 6 import smtplib 7 from email.mime.text import MIMEText 8 mailto_list=['***@**.***'] 9 mail_host="smtp.****.com" #设置服务器 10 mail_user="***@**.**" #用户名 11 mai
流柯
2018/08/30
6300
Python模块学习--email
SMTP (Simple Mail Transfer Protocol)   邮件传送代理 (Mail Transfer Agent,MTA) 程序使用SMTP协议来发送电邮到接收者的邮件服务器。SMTP协议只能用来发送邮件,不能用来接收邮件。大多数的邮件发送服务器 (Outgoing Mail Server) 都是使用SMTP协议。SMTP协议的默认TCP端口号是25。
py3study
2020/01/10
1.5K0
zabbix邮件报警python脚本
下面是两个不同的python脚本,只是连接邮件服务器的方法不同,其他方法还是相同的
py3study
2020/01/08
8440
python 发送中文邮件
        me = mail_user+"<"+mail_user+"@"+mail_postfix+">"
py3study
2020/01/09
7680
python3实现邮件的发送
使用的email和smtplib模块,这里简单介绍下smtplib.SMTP()类
dogfei
2020/07/31
3710
zabbix通过python脚本发告警邮件
python脚本为敏捷开发脚本,在zabbix监控也起到重要作用,以下是使用python脚本发送告警邮件配置方法。
菲宇
2019/06/11
1.1K0
zabbix通过python脚本发告警邮件
python smtplib在linux上发送邮件失败解决方式
之后放在linux上却 /usr/local/python3/lib/python3.7/socket.py
陈灬大灬海
2020/07/03
2K0
Linux两种发邮件的方式
1、下载安装msmtp wget https://marlam.de/msmtp/releases/msmtp-1.6.7.tar.xz tar -xvJf msmtp-1.6.7.tar.xz ls cd msmtp-1.6.7 ./configure --prefix=/usr/local/msmtp make && make install 2、配置msmtp账号 cd /usr/local/msmtp mkdir etc #配置文件目录和配置文件都要自己建 cd etc 手动创建配置文件vi msmtprc # Set default values for all following accounts. defaults logfile /usr/local/msmtp/msmtp.log # The SMTP server of the provider. account default #你的发送邮件服务器 host smtp.126.com port 25 #要从哪个邮箱发出 from xxxx@126.com #这里如果使用on的话会报 "msmtp: cannot use a secure authentication method"错误 auth login tls off #邮箱用户名 user xxxx@126.com #邮箱用户名 #邮箱密码,这里可是明文的,如果你觉得不安全可以把文件改为600属性 password xxxxxxx # Set a default account account default: test Esc,shift+: 进入命令模式,输入x,保存退出。 由于password是明码,所以我们需要修改此文件的权限 chmod 600 etc/msmtprc 3、测试 /usr/local/msmtp/bin/msmtp youremail@test.com 输入任意字符,然后按Ctrl+D退出,查看邮件是否收到。 由于设置了日志,可以到 /usr/local/msmtp/msmtp.log,查看日志,发信成功失败都会有记录。 按ctrl+d结束 但是它不能够发送附件,所以安装mutt 4、安装mutt vi /etc/Muttrc ,编辑mutt的总设置,修改以下几行 set from="发送邮件地址" set sendmail="/usr/local/msmtp/bin/msmtp" set use_from=yes set realname="发件人" set editor="vi" 发件地址最好与msmtp设置的账号相同,否则可能会出错。 5、测试一下mutt是否有效 echo "测试测试" | mutt -s "测试" 测试邮件地址 echo "testmail" |mutt -s "test" [-a /etc/hosts] test@163.com 这里的-a 是指添加附件,如果是多个附件的话就 多加几个 -a 文件名 可以使用mutt进行邮件备份等工作了,结合cron使用,可以实现的功能相当多。
菲宇
2019/06/11
1.6K0
最全总结!聊聊 Python 发送邮件的几种方式
我们都知道 Python内置了对 SMTP 的支持,可以发送纯文本、富文本、HTML 等格式的邮件
AirPython
2020/07/15
4660
电子邮件实现详解(下)
书接上回,上篇中主要介绍了电子邮件协议格式等理论相关内容,这篇中我们从JavaMail、Python的smtplib以及Django的django.core.mail模块三个视角来实现发送邮件这件事。
才浅Coding攻略
2022/12/12
1.9K0
电子邮件实现详解(下)
python接口自动化(三十)--html测试报告通过邮件发出去——中(详解)
  上一篇,我们虽然已经将生成的最新的测试报告发出去了,但是MIMEText 只能发送正文,无法带附件,因此我还需要继续改造我们的代码,实现可以发送带有附件的邮件。发送带附件的需要导入另外一个模块 MIMEMultipart。还有就是测
北京-宏哥
2019/09/11
1.9K0
python接口自动化(三十)--html测试报告通过邮件发出去——中(详解)
手把手教你如何使用 Python 操作 Mysql 进行数据库的 diff
项目工作中,我们会遇到测试环境特别多的情况,例如:n套beta环境,多套预生产环境,多套uat环境等各种测试环境。为保证所有测试环境表结构上的一致性,如果只是单纯地靠人工来检查并更新,未免显得太过吃力且效率低下,还容易在实施的过程中出现遗漏的问题。
Wu_Candy
2022/07/04
9670
不同环境相同配置项的内容如何diff差异?
在工作中,我们用到的环境经常会有很多套,由于不同的环境使用的配置是不一样的,那么怎么能够对比所有不同环境的相同配置项各是什么内容呢?
Wu_Candy
2022/07/04
1.2K0
不同环境相同配置项的内容如何diff差异?
用Python对MySQL同步状态进行监
使用Python对MySQL数据库服务器是否可访问,及主从同步是否中断进行监控,是一件非常简单的事情。感谢Python给我们带来了如此简单,强大,快捷的开发环境。
py3study
2020/01/08
9730
相关推荐
Python+Pytest+Allure+Json 最全Api自动化框架之邮件发送功能
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文