返回顶部
首页 > 资讯 > 后端开发 > Python >Python面向对象之为何要用类
  • 172
分享到

Python面向对象之为何要用类

要用面向对象Python 2023-01-31 01:01:34 172人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

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

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

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

一、面向对象

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

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

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

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

1、函数式编程

# 伪代码
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、用户口令都不一样,我们就要改造代码变成下面的样子。

# 伪代码
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")

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

# 伪代码
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 接收代码
    ...
    
def delete_mail(smtp_host, smtp_username, smtp_password)
    smtp_obj = smtplib.SMTP(smtp_host, smtp_username, smtp_password)
    # mail 删除功能
    ...
    
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当中通过创建类,就可以很好的实现面向对象的编程思想,同样是上面邮件发送程序,我们来用类的方式实现。

# 伪代码
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)
            
    # 发送邮件
    def send_mail(self, to_user, title, content):
        self.smtp_obj.sendmail(to_user, title, content)
        
    # 接收邮件
    def recv_mail(self, recv_argv, ...)
        # mail 接收代码

    # 删除邮件    
    def delete_mail(self, delete_argv, ...)
        # mail 删除代码
        
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、面向对象式编程的三大特性:封装、继承、多态


--结束END--

本文标题: Python面向对象之为何要用类

本文链接: https://lsjlt.com/news/183606.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python面向对象之为何要用类
      对于非程序员科班出身的技术人员,理解很多开发思想领域里面的事情,其实是一件挺痛苦的事情,直到接触到了Python当中的类,我才明白了什么是面向对象,更多的理解还是要通过实际的代码操练才能够慢慢的掌握。今天记录一下什么是面向对象,在Pyt...
    99+
    2023-01-31
    要用 面向对象 Python
  • Python面向对象之类和对象
    目录类定义类定义类和属性类中方法对象方法(普通方法)类方法静态方法魔术方法对象创建对象对象属性总结 类 定义类 所有类名首字母要求大写,多个单词时遵循驼峰命名法 所...
    99+
    2024-04-02
  • 面向对象的主要Python类
    本篇内容主要讲解“面向对象的主要Python类”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“面向对象的主要Python类”吧!对象可以使用普通的属于对象的变量存储数据。属于一个对象或Python...
    99+
    2023-06-17
  • Python面向对象之入门类和对象
    目录什么是面向对象编程?定义类,从具体代码来感受吧!多个类和对象的观察补充一下类的属性(数据部分)总结什么是面向对象编程? 我们是不是听过面向过程,拿来放在一起对比就比较好理解了。 ...
    99+
    2024-04-02
  • python 面向对象之类方法
    类方法通过@classmethod装饰器实现,类方法和普通方法的区别是, 类方法只能访问类变量,不能访问实例变量举个例子class Dog(object):     def __i...
    99+
    2023-01-30
    面向对象 方法 python
  • python面向对象之类成员
    一、概述       上篇《python面向对象OOP》介绍了python面向对象的基础初级入门部分,提到了类的定义,使用,类的三大特性;经典类,新式类在查找时的区别等,有了前面的基础,本文接着描述面向对象中类成员;先整体描述下,类中的成员...
    99+
    2023-01-31
    面向对象 成员 python
  • python 面向对象、类、对象
    class 类 object 对象 object-oriented programming 面向对象,简称OOP attribute 属性 method 方法 inheritance 继承 python中通过类和对象来实现 ...
    99+
    2023-01-31
    面向对象 对象 python
  • python面向对象,类
    1:类和对象    是面向对象中的俩个重要概念,类是对事物的抽象,比如人类,球类。对象是事物的实例,比如足球,篮球。球类可以对球的特征和行为进行抽象,然后可以实例化一个真实的球体出来。2:类的定义    类把需要的变量和函数组合成一起,这种...
    99+
    2023-01-31
    面向对象 python
  • python 面向对象之类的继承
    python中什么是继承:新类不必从头编写新类从现有的类继承,就自动拥有了现有类的所有功能新类只需要编写现有类缺少的新功能继承的好处:复用已有代码自动拥有了现有类的所有功能只需要编写缺少的新功能继承的特点:子类和父类是is关系python继...
    99+
    2023-01-30
    面向对象 python
  • Python入门之面向对象和类
    目录一、两大编程思想二、类与对象三、定义Python中的类四、对象创建五、类属性、类方法、静态方法六、动态绑定属性和方法七、面向对象的三大特征八、方法重写总结一、两大编程思想 二、...
    99+
    2024-04-02
  • Python面向对象之面向对象基本概念
    面向过程和面向对象概念 过程和函数:过程类似于函数,只能执行,但是没有返回结果;函数不仅能执行,还能返回结果。 面向过程和面向对象 基本概念 面向过程-怎么做 把完成某一个需求的所有步骤从头到尾逐步实现; 根据开发需求,将某些功能独立的...
    99+
    2023-01-31
    面向对象 基本概念 Python
  • Java 面向对象 之 抽象类 abstract
    转载于 : http://www.verejava.com/id=16992804621647 public class TestAbstract {public static&n...
    99+
    2023-06-02
  • python面向对象之类的继承详解
    目录一、概述 二、类的继承2.1 继承的定义2.2 构造函数的继承 2.3 子类对父类方法的重写三、类继承的事例一、概述  面向对象编程 (OOP) 语言的一个主要功能就是“继承”。...
    99+
    2024-04-02
  • Python面向对象(类之间的关系)(三
    类与类之间的关系     在我们的世界中事物和事物之间总会有一些联系.     在面向对象中. 类和类之间也可以产生相关的关系     1. 依赖关系         执行某个动作的时候. 需要xxx来帮助你完成这个操作. 此时的...
    99+
    2023-01-30
    面向对象 关系 Python
  • Python面向对象编程之类的概念
    目录1、面向对象基本概念1.1 万物皆对象1.2 面向对象编程1.3 面向对象的特征2、Python面向对象的术语3、Python类的构建3.1 类的基本构建 3.2 类的构造函数3...
    99+
    2024-04-02
  • Python面向对象编程之类的封装
    目录1、封装的理解2、私有类属性、公开类属性、私有实例属性和公开实例属性2.1 公开类属性2.2 私有类属性2.3 公开实例属性2.4 私有实例属性2.5 私有属性不一定真的私有3、...
    99+
    2024-04-02
  • Python面向对象编程之类的继承
    目录1、对继承的理解2、类继承的构建3、Python中最基础的类4、ython类的重载4.1 属性重载4.2 方法重载5、类的多继承1、对继承的理解 继承(Inheritance) ...
    99+
    2024-04-02
  • Python面向对象编程之类的运算
    目录1、运算概念的理解2、运算符的重载2.1 算术运算符2.2 比较运算符2.3 成员运算2.4 其他运算3、Python类的多态1、运算概念的理解 运算(Operation)是操作...
    99+
    2024-04-02
  • Python面向对象编程之类的进阶
    目录1、引用的概念2、对象的拷贝2.1 实例方法的引用2.2 类的特性装饰器3、类的名称修饰3.1 _单下划线开头的名称修饰3.2 _单下划线结尾的名称修饰3.3 __双下划线开头的...
    99+
    2024-04-02
  • python 面向对象之继承
    文章目录 前言继承的概念单继承多继承子类重写父类的同名方法和属性子类调用父类同名的方法和属性多层继承私有权限 前言 前面我们已经学习了 python 面向对象的类和对象,那么今天我将为大...
    99+
    2023-09-01
    python 开发语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作