首页 > 编程语言 >Python_面向对象-6

Python_面向对象-6

时间:2024-12-19 09:30:28浏览次数:9  
标签:__ Python self 面向对象 print 方法 class def

文章目录

Python面向对象基础

今日内容介绍

  • 知道类的概念
    • 类是模板
  • 知道对象的概念
    • 对象就是通过模板创建出来的实体
  • 知道使用class关键字定义一个类
    • class 类名(object):
      pass
  • 能够说出调用对象中的方法的语法格式。
    • 对象名.方法名([参数列表])
  • 能够说出私有权限的作用
    在这里插入图片描述

我们可以用一个现实中的比喻来抽象地理解你的这四点。将 面向过程面向对象 比作两种不同的工作方式,以完成一个复杂的大项目(比如建造城市)为例。


①: 面向过程和面向对象都可以实现代码重用和模块化编程,只不过面向对象的模块化更深,数据也更封闭和安全。

抽象理解:工具箱 vs 专属工具包

  • 面向过程

    • 就像一个工具箱,里面有很多通用工具,比如锤子、螺丝刀、钳子。每次做事情时,我们从工具箱里挑出工具来完成任务,但每次都需要手动组合这些工具来解决问题。
    • 重用性体现在:工具是现成的,可以重复用,但它们是分散的,需要自己管理和安排。
  • 面向对象

    • 就像为每个工人准备了一个专属工具包,这些工具包是按照不同工种(类)组织好的,工人使用工具包时,不需要关心细节,直接使用即可。
    • 数据更封闭:工具包里面的东西是封装好的,工人只能通过特定方式取用工具(比如钥匙打开工具包)。

总结:

  • 面向过程的模块化较浅,所有的工具(代码)都暴露在外。
  • 面向对象则有更深的模块化和封装,工人(代码)只能通过“安全的接口”操作工具,避免了错误操作。

②: 面向对象的思维方式更加贴近现实生活,更容易解决大型的复杂的业务逻辑。

抽象理解:分工明确的团队 vs 零散的个人任务

  • 面向过程

    • 像一个人独自承担所有工作任务。这个人需要规划流程,并且按照步骤一步步完成工作,每个步骤是单独的,并没有分工明确的角色。
    • 当任务简单时,这种方式很高效,但一旦任务变复杂,管理流程和维护逻辑会变得很难。
  • 面向对象

    • 就像组建一个团队,每个人(对象)都有明确的分工和责任,比如设计师负责设计、工程师负责施工、财务负责预算。
    • 每个人专注自己的部分,最后通过团队协作完成复杂的任务。这样,整个项目的逻辑更接近现实生活,职责划分清晰。

总结:

  • 面向过程更像是流水线作业,适合小任务。
  • 面向对象像现实中的团队合作,分工明确,易于处理复杂的大型项目。

③: 从前期开发的角度来看,面向对象比面向过程要更复杂;但是从维护和扩展的角度来看,面向对象要远比面向过程简单。

抽象理解:搭建积木城市 vs 临时手工拼装城市

  • 面向过程

    • 就像直接用手工搭建一座城市:材料(代码)很简单,流程(逻辑)直观,但整个城市是“固定的”,每一块拼接都紧密依赖。后期如果需要修改某个区域(比如拆掉一座大楼),就会很麻烦,甚至需要重新拆掉很多地方重建。
    • 前期简单,后期维护复杂。
  • 面向对象

    • 像使用“积木模块”搭建城市:每个模块(类和对象)都独立且功能明确,比如一块积木是医院模块,另一块是学校模块。如果需要修改,只需要替换或扩展相关模块。
    • 前期设计模块时,需要花费更多时间,但后期维护和扩展更加简单,只需要调整相关模块即可。

总结:

  • 面向过程适合快速搭建小城市(简单项目),但扩展维护困难。
  • 面向对象适合搭建复杂的大城市(复杂项目),扩展维护轻松。

④: 面向过程的代码执行效率比面向对象高。

抽象理解:特定任务的单点直达 vs 通用任务的多次传递

  • 面向过程

    • 就像你自己直接去完成某件事:你直接从 A 点到达 B 点,没有中间环节,也没有其他人参与,执行效率更高。
    • 比如修灯泡,你直接爬上梯子换灯泡,过程简单快速。
  • 面向对象

    • 像雇人来完成这件事:你需要联系电工,电工带着工具过来,检查问题,然后换灯泡。整个过程涉及沟通和工具封装,效率稍低,但流程更加安全和灵活。
    • 如果是复杂的维修任务,面向对象会因为更好的管理和分工,体现出优势。

总结:

  • 面向过程更适合高效完成简单任务。
  • 面向对象因为分工和封装的特性,在效率上可能稍慢,但更适合复杂系统和灵活扩展。

最终抽象总结:

  1. 面向过程是单人直线任务:高效直接,但结构松散,复杂任务容易失控。
  2. 面向对象是团队模块协作:逻辑清晰,适合复杂任务,但初期设计需要更多时间和精力。
  3. 面向对象虽然在单次任务上不如面向过程高效,但它的长期维护性和扩展性让它在现代开发中成为主流。

什么是面向对象?

【了解】常见的编程思想

==目标:==了解常见的编程思想有哪些?
在这里插入图片描述

先来看看什么是思想?比如,乌鸦喝水、猴子吃椰子等。

在这里插入图片描述

说明:

我们会发现,有了思想,就能解决很多问题。

类似的,编程思想就是:利用计算机来解决实际编程问题的一种思维方式。

而编程思想是通用的,与计算机语言本身没有太大关系。

常见的编程思想有:

(1)面向过程

(2)面向对象

Python是同时支持面向过程和面向对象的编程语言!

在这里插入图片描述

总结:

(1)常见的编程思想有:面向过程、();A、面向对象;B、面向组件;

(2)注意:当有了编程思想后,学习不同编程语言都是相通的。

【了解】面向过程是什么

==目标:==了解什么是面向过程?

【官方解释】面向过程是一种以过程为中心的编程思想。

通俗地说,在解决编程问题时,我们会把需要的操作步骤都列出来,然后按照操作步骤写代码,这种思维就是面向过程思想。

说明:

比如,要产生一个随机数,步骤:(1)导入random模块;(2)产生随机数;(3)输出结果。

在实际生活中,为了更好理解面向过程。

使用面向过程思维来了解:使用ATM机取钱的过程。

(1)带上银行卡,去ATM机所在的地方;
(2)排队等待;
(3)轮到自己了,把银行卡插入ATM机;
(4)输入密码,取钱;
(5)取钱成功。

总结:

(1)在之前学习的Python知识,都是使用的面向过程思想;

(2)注意:面向过程思想强调的是(),按照步骤依次进行就能把事情完成。A、步骤或过程;B、对象。

【掌握】什么是面向对象?

==目标:==掌握什么是面向对象?

【官方解释】面向对象是软件开发方法,一种编程范式。面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。

# 学生:姓名、年龄;  玩、学习
# a.先定义
class Student:
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def play(self):
        print(f"{self.age}岁的{self.name}还在玩泥巴...")

    def study(self):
        print("好好学习,天天向上!!")

# b.后调用
stu = Student("张三",16)
print(stu.name)
print(stu.age)
# 调用
stu.play()
stu.study()

# 总结:
# 1. 封装后的代码执行后不能立马有效果  ==抽象
# # 2. 一切皆对象:类 ==> 对象
# # 3. 类:包含两部分: 变量、方法

通俗地说,面向对象思想就是:当解决问题的视角不再是详细的操作步骤,而是另一个视角:操作对象。比如,操作手机打电话、操作电脑来看电影、操作冰箱来存储新鲜水果等。

【对象】可以理解为冰箱、手机、电脑等一切事物。

说明:面向对象听起来很抽象、模糊、不理解,暂时没关系,记住五个字:一切皆对象。

面向对象思想优势:

(1)在现实生活中,所有事物都被看作是对象;

(2)面向对象的宗旨:模拟现实世界中的一切事物;

(3)贴近实际生活,给所有对象都赋予属性和方法,更加人性化。

例如,一起来完成:

(1)使用面向对象思维分析:吃烤鱼;

(2)涉及对象:店铺老板、外卖小哥。
在这里插入图片描述

总结:

(1)可以简单的理解操作对象的过程,就是将面向过程的操作步骤再次封装处理;

(2)面向过程的身份:执行者,面向对象的身份:();A、指挥者;B、执行者;

(3)特别注意:学习面向对象知识,总结归纳就是5个字:一切皆对象。[思考]

==【思考】==例如,一起来完成:

(1)举两个现实生活中的案例;

(2)以面向过程思想分析;

(3)以面向对象思想分析。

吃饭
面向过程: 买菜、洗菜、做饭菜、吃
面向对象: 点外卖 [厨师、外卖员]
打水
面向过程: 拿水杯、去清洗、装水、盖盖子、拿到教室
面向对象: 叫方哥给你打杯水.

案例:

玩游戏
面向过程: [我]开机、打游戏、打、xxx、关机;  -我玩游戏
面向对象: 我叫人帮我玩游戏. [关注结果]

【了解】封装

==目标:==了解什么是封装?

面向对象思想虽然比较复杂,但有一些特性有迹可循。

面向对象的三大特性:

(1)封装

(2)继承

(3)多态

说明:今天主要围绕着【封装】来讲解。

在现实生活中,也有很多与封装的案例。

比如,小明是一个IT公司的程序员。

小明身边的人了解小明的隐私内容项
银行柜员身份证号、联系方式、银行卡号等。
同事姓名、职位、性别、年龄等。
爸妈血型、身份证号、女朋友姓名、性别等。

类似的,在Python面向对象中也有封装。

简单地说,封装就是把对象的属性和方法放在一个整体中,并限制对属性和方法的访问操作。而这里说的整体,就是【类】。

class 类名:
	def 方法名():
		属性1 = 值1
		属性2 = 值2
		...
	
	def 方法名2():
		执行代码1
		执行代码2
		...

例如,在下图日常生活中常见的画面,哪些可以封装成一个类?

在这里插入图片描述

说明:一切皆对象。

电脑
手机
数据线
...

你的理解很接近!封装(Encapsulation) 的确可以看作是一种“入口”,它将对象的内部实现隐藏起来,外界只能通过公开的“入口”(方法或属性)来与它交互。我们可以更详细地解释这个想法:


封装的核心思想

  1. 隐藏内部细节:

    • 类的内部细节(如属性和方法)是封装好的,外界(其他代码)无法直接访问这些细节。
    • 你只能通过公开的“入口”(方法或特定允许访问的属性)与对象交互。
  2. 控制访问权限:

    • 封装可以通过公开(public)保护(protected)、**私有(private)**的机制,控制哪些信息或功能可以被外部使用,哪些只能在类内部使用。
    • 你可以选择对外“暴露”什么,隐藏什么。
  3. 安全性和灵活性:

    • 通过封装,可以保护对象的内部状态,防止外界直接修改(或破坏)。
    • 你可以用方法(入口)对外提供一个安全的方式来改变对象状态,同时确保合理性。

生活中的类比:入口的例子

例子1:房子的门
  • 房子是封装好的内部世界:
    房子里面可能有很多房间、家具和隐私。外界的人不能直接进入房子。

  • 门是唯一的入口:
    如果你想进房子,你必须经过“门”(方法),敲门、输入密码或刷卡,门会决定你是否有权限进入。

  • 门的规则是类的封装规则:

    • 如果你是家人(类的内部方法),你可以用钥匙自由进出。
    • 如果你是外人(类外部的方法),你必须通过允许的方式(公开方法)进入。
例子2:ATM机
  • ATM机是一个封装:
    它封装了银行账户信息、转账、取款的逻辑。

  • 公开的“入口”:
    如果你想取钱,不能直接从银行金库取出现金,必须通过ATM机的界面操作(公开的方法),并提供正确的信息(密码)。

  • 控制访问权限:
    ATM机会根据输入的信息决定是否允许你取钱。比如:

    • 你输入正确的卡号和密码:可以取钱。
    • 你输错密码:无法取钱。

在编程中的封装

封装就是把对象的属性和方法“封装”起来,让外部不能直接访问,必须通过特定的接口(方法)来使用或修改它们。

封装的代码示例
class BankAccount:
    def __init__(self, owner, balance):
        self.owner = owner  # 公共属性
        self.__balance = balance  # 私有属性

    def deposit(self, amount):  # 公共方法(入口)
        if amount > 0:
            self.__balance += amount
            print(f"{amount} 元存入账户。当前余额:{self.__balance} 元")
        else:
            print("存款金额必须大于0")

    def withdraw(self, amount):  # 公共方法(入口)
        if amount > 0 and amount <= self.__balance:
            self.__balance -= amount
            print(f"{amount} 元已取出。当前余额:{self.__balance} 元")
        else:
            print("余额不足或取款金额无效")

    def get_balance(self):  # 提供访问私有属性的接口
        return self.__balance

# 创建银行账户
account = BankAccount("小明", 1000)

# 存款
account.deposit(500)  # 输出: 500 元存入账户。当前余额:1500 元

# 取款
account.withdraw(300)  # 输出: 300 元已取出。当前余额:1200 元

# 查看余额
print(f"账户余额为:{account.get_balance()} 元")  # 输出: 账户余额为:1200 元

# 直接访问私有属性会报错
# print(account.__balance)  # 报错: AttributeError: 'BankAccount' object has no attribute '__balance'

总结你的想法:

你的理解完全正确!我们可以简单概括为:

  1. 封装像是一个入口,外界只能通过入口访问类内部的内容。
  2. 封装控制了谁能进入,怎么进入,以及是否允许修改内部的状态。
  3. 对外公开的是“安全”的接口,对内隐藏了复杂的细节。

这个设计不仅保护了内部逻辑,还让类更加易用和安全。

标签:__,Python,self,面向对象,print,方法,class,def
From: https://blog.csdn.net/weixin_74002941/article/details/144553231

相关文章

  • 《python的数学函数绘图软件》毕业设计项目
    大家好,我是俊星学长,一名在Java圈辛勤劳作的码农。今日,要和大家分享的是一款《python的数学函数绘图软件》毕业设计项目。项目源码以及部署相关事宜,请联系俊星学长,文末会附上联系信息哦。......
  • 2024实测验证可用的股票数据接口集合.:python、JavaScript 、JAVA等实例代码演示教你如
    实测可用的股票数据接口,可以直接点击在浏览器中验证:沪深两市股票列表API接口链接(可点击验证):https://api.mairui.club/hslt/list/b997d4403688d5e66a【实时数据接口】沪深两市实时交易数据接口API接口链接(可点击验证):https://api.mairui.club/hsrl/ssjy/000001/b997d4403......
  • 面向对象
            ......
  • Python知识分享第二十九天-PyMySQL
    PyMySQL介绍:概述:它是Python的1个库(模块),可以实现通过Python代码,操作MySQL数据库.该库需要手动安装一下.安装方式:方式1:导包时自动安装.方式2:在PyCharm的Settings->Python编辑器或者Anaconda->安装方式3:通过pip方式,在命令行中......
  • 常用于优化算法测试的python非凸函数有哪些?
            在优化算法领域,有一些常用的测试函数,它们被广泛用于评估和比较不同优化算法的性能。        非凸函数是指在其定义域内至少存在一个点,使得该点的任意邻域内函数值不满足凸性条件的函数。换句话说,非凸函数在其定义域内至少存在一个点,使得函数的图像在......
  • Python Tkinter 弹窗美化指南
    在Python编程中,Tkinter是标准GUI(图形用户界面)库,它允许开发者创建桌面应用程序。尽管Tkinter提供了基本的窗口和控件功能,但默认的样式和外观往往显得单调。因此,对Tkinter弹窗进行美化是提升用户体验的重要步骤。本文将详细介绍如何使用Tkinter创建并美化弹窗,包括理论概述和详细的代......
  • python连接okx查询自己的持仓【量化交易】
     需要安装ccxt以下代码在jupyter中运行需要去app中获取自己的apiKey、secret、password,才能查到自己的个人持仓情况根据自己的代理设置proxiesimportccxtimportpandasaspdimporttimefromIPython.displayimportclear_outputimporttracebackfromdatetimeimp......
  • python毕设 社区住户信息管理系统论文+程序
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于社区住户信息管理系统的研究,现有研究多聚焦于大型企业或特定行业的信息管理,专门针对社区住户信息管理系统的研究相对较少。在国内......
  • python毕设 美容店服务管理系统论文+程序
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于美容店服务管理系统的研究,现有研究主要以传统的管理模式为主,专门针对利用python开发美容店服务管理系统的研究较少 1。在国内外,......
  • Go实战全家桶之二十六:指标计算再次强化面向对象(ES模型)
    ES模型typeSumAmountstruct{AvabCountint64`json:"avab_count"`//供盘数AvabQtyint64`json:"avab_qty"`//供货数RfqCountint64`json:"rfq_count&qu......