文章目录
- Python面向对象基础
Python面向对象基础
今日内容介绍
- 知道类的概念
- 类是模板
- 知道对象的概念
- 对象就是通过模板创建出来的实体
- 知道使用class关键字定义一个类
- class 类名(object):
pass
- class 类名(object):
- 能够说出调用对象中的方法的语法格式。
- 对象名.方法名([参数列表])
- 能够说出私有权限的作用
我们可以用一个现实中的比喻来抽象地理解你的这四点。将 面向过程 和 面向对象 比作两种不同的工作方式,以完成一个复杂的大项目(比如建造城市)为例。
①: 面向过程和面向对象都可以实现代码重用和模块化编程,只不过面向对象的模块化更深,数据也更封闭和安全。
抽象理解:工具箱 vs 专属工具包
-
面向过程:
- 就像一个工具箱,里面有很多通用工具,比如锤子、螺丝刀、钳子。每次做事情时,我们从工具箱里挑出工具来完成任务,但每次都需要手动组合这些工具来解决问题。
- 重用性体现在:工具是现成的,可以重复用,但它们是分散的,需要自己管理和安排。
-
面向对象:
- 就像为每个工人准备了一个专属工具包,这些工具包是按照不同工种(类)组织好的,工人使用工具包时,不需要关心细节,直接使用即可。
- 数据更封闭:工具包里面的东西是封装好的,工人只能通过特定方式取用工具(比如钥匙打开工具包)。
总结:
- 面向过程的模块化较浅,所有的工具(代码)都暴露在外。
- 面向对象则有更深的模块化和封装,工人(代码)只能通过“安全的接口”操作工具,避免了错误操作。
②: 面向对象的思维方式更加贴近现实生活,更容易解决大型的复杂的业务逻辑。
抽象理解:分工明确的团队 vs 零散的个人任务
-
面向过程:
- 像一个人独自承担所有工作任务。这个人需要规划流程,并且按照步骤一步步完成工作,每个步骤是单独的,并没有分工明确的角色。
- 当任务简单时,这种方式很高效,但一旦任务变复杂,管理流程和维护逻辑会变得很难。
-
面向对象:
- 就像组建一个团队,每个人(对象)都有明确的分工和责任,比如设计师负责设计、工程师负责施工、财务负责预算。
- 每个人专注自己的部分,最后通过团队协作完成复杂的任务。这样,整个项目的逻辑更接近现实生活,职责划分清晰。
总结:
- 面向过程更像是流水线作业,适合小任务。
- 面向对象像现实中的团队合作,分工明确,易于处理复杂的大型项目。
③: 从前期开发的角度来看,面向对象比面向过程要更复杂;但是从维护和扩展的角度来看,面向对象要远比面向过程简单。
抽象理解:搭建积木城市 vs 临时手工拼装城市
-
面向过程:
- 就像直接用手工搭建一座城市:材料(代码)很简单,流程(逻辑)直观,但整个城市是“固定的”,每一块拼接都紧密依赖。后期如果需要修改某个区域(比如拆掉一座大楼),就会很麻烦,甚至需要重新拆掉很多地方重建。
- 前期简单,后期维护复杂。
-
面向对象:
- 像使用“积木模块”搭建城市:每个模块(类和对象)都独立且功能明确,比如一块积木是医院模块,另一块是学校模块。如果需要修改,只需要替换或扩展相关模块。
- 前期设计模块时,需要花费更多时间,但后期维护和扩展更加简单,只需要调整相关模块即可。
总结:
- 面向过程适合快速搭建小城市(简单项目),但扩展维护困难。
- 面向对象适合搭建复杂的大城市(复杂项目),扩展维护轻松。
④: 面向过程的代码执行效率比面向对象高。
抽象理解:特定任务的单点直达 vs 通用任务的多次传递
-
面向过程:
- 就像你自己直接去完成某件事:你直接从 A 点到达 B 点,没有中间环节,也没有其他人参与,执行效率更高。
- 比如修灯泡,你直接爬上梯子换灯泡,过程简单快速。
-
面向对象:
- 像雇人来完成这件事:你需要联系电工,电工带着工具过来,检查问题,然后换灯泡。整个过程涉及沟通和工具封装,效率稍低,但流程更加安全和灵活。
- 如果是复杂的维修任务,面向对象会因为更好的管理和分工,体现出优势。
总结:
- 面向过程更适合高效完成简单任务。
- 面向对象因为分工和封装的特性,在效率上可能稍慢,但更适合复杂系统和灵活扩展。
最终抽象总结:
- 面向过程是单人直线任务:高效直接,但结构松散,复杂任务容易失控。
- 面向对象是团队模块协作:逻辑清晰,适合复杂任务,但初期设计需要更多时间和精力。
- 面向对象虽然在单次任务上不如面向过程高效,但它的长期维护性和扩展性让它在现代开发中成为主流。
什么是面向对象?
【了解】常见的编程思想
==目标:==了解常见的编程思想有哪些?
先来看看什么是思想?比如,乌鸦喝水、猴子吃椰子等。
说明:
我们会发现,有了思想,就能解决很多问题。
类似的,编程思想就是:利用计算机来解决实际编程问题的一种思维方式。
而编程思想是通用的,与计算机语言本身没有太大关系。
常见的编程思想有:
(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) 的确可以看作是一种“入口”,它将对象的内部实现隐藏起来,外界只能通过公开的“入口”(方法或属性)来与它交互。我们可以更详细地解释这个想法:
封装的核心思想
-
隐藏内部细节:
- 类的内部细节(如属性和方法)是封装好的,外界(其他代码)无法直接访问这些细节。
- 你只能通过公开的“入口”(方法或特定允许访问的属性)与对象交互。
-
控制访问权限:
- 封装可以通过公开(public)、保护(protected)、**私有(private)**的机制,控制哪些信息或功能可以被外部使用,哪些只能在类内部使用。
- 你可以选择对外“暴露”什么,隐藏什么。
-
安全性和灵活性:
- 通过封装,可以保护对象的内部状态,防止外界直接修改(或破坏)。
- 你可以用方法(入口)对外提供一个安全的方式来改变对象状态,同时确保合理性。
生活中的类比:入口的例子
例子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'
总结你的想法:
你的理解完全正确!我们可以简单概括为:
- 封装像是一个入口,外界只能通过入口访问类内部的内容。
- 封装控制了谁能进入,怎么进入,以及是否允许修改内部的状态。
- 对外公开的是“安全”的接口,对内隐藏了复杂的细节。
这个设计不仅保护了内部逻辑,还让类更加易用和安全。
标签:__,Python,self,面向对象,print,方法,class,def From: https://blog.csdn.net/weixin_74002941/article/details/144553231