python面向对象基础-封装
admin
2024-02-09 21:55:32
0
面向对象就是将编程当成一个事务,对外界来说,事务是直接使用,不用去管他内部的情况。而编程就是设置事务能够做什么事。

类是对一系列具有相同特征和行为的事务的统称,是一个抽象的概念,不是真实存在的事务。类是用来创建对象的。
1、特征即是属性 2、行为即是方法
语法:
class obj():代码....
注意:类名要满足标识符命名规则,同时遵循大驼峰命名规则 对象 对象(实例)是类创建出来的真实存在的事物。
语法: 对象名 = 类名()
示例:
#需求:洗衣机,功能:洗衣服#定义洗衣机类
class Washer():def wash(self):print("能洗衣服")#创建对象
haier = Washer()#3.验证成果
#使用wash功能 --实例方法/对象方法 -- 对像名.Wash()
#类里面定义的函数称为实例方法
haier.wash()
注意:类里面定义的函数称为实例方法
类里面的self参数
class Washer():def wash(self):print('洗衣服')print(self)haier = Washer()
print(haier)haier.wash()#
结论 由于打印对象和打印self得到的内存地址相同,所以self指的是调用该函数的对象 案例测试 1.一个类可以创建多个对象?——可用 2.多个对象都调用函数的时候,self地址相同——不同
# 1.一个类可以创建多个对象
#2.多个对象都调用函数的时候,self地址相同
class Washer():def wash(self):print('洗衣服')print(self)harer1 = Washer()
harer1.wash()
harer2 = Washer()
harer2.wash()

添加和获取对象属性

属性即使特征,比如:洗衣机的宽度、高度、重量.... 对象属性既可以在类外面添加和获取,也能在类里面添加和获取。

类外面添加对象属性

语法 对象名.属性名 = 值

类外面获取对象属性

语法 对象名.属性名
案例体验
class Washer():def wash(self):print('洗衣服')haier1 = Washer()# 对象名.属性名 = 值
haier1.width = 400
haier1.height = 500#对象名.属性名
print(f'haier1洗衣机的宽度是{haier1.width}')
print(f'haier1洗衣机的高度是{haier1.height}')

类里面获取对象属性

#定义类
class Washer():def wash(self):print('洗衣机')def print_info(self):#self.属性名# print(self.width)# print(self.height)print(f'洗衣机的宽度{self.width}')print(f'洗衣机的高度{self.height}')haier1 = Washer()#添加属性
haier1.width = 400
haier1.height = 500
haier1.wash()#对象调用方法
haier1.print_info()

魔法方法

在python中,_xx_()的函数叫做魔法方法,指的是具有特殊功能的函数。 _init_()方法的作用:初始化对象
#目标:定义init魔法方法设置初始化属性  并访问调用
"""
1.定义类init魔法方法:width 和 height添加实例方法:访问实例属性2.创建对象
3.验证成果
"""class Washer():def __init__(self):#添加实例属性self.width = 500self.height = 800def print_info(self):print(f'洗衣机的宽度是{self.width}')print(f'洗衣机的宽度是{self.height}')haier = Washer()
haier.print_info()
注意:
_init_()方法,在创建一个对象时默认被调用,不需要手动调用。
_init_(self)中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递过去。
带参数的_init_() 当一个类需要创建多个对象,需要对不同对象设置不同的初始值属性时,可以使用传参的方式实现。
#1.定义类:带参数的init:宽度和高度:实例方法:调用实例属性
class Washer():def __init__(self,width,height):self.widht = widthself.height = heightdef print_info(self):print(f'洗衣机的宽度{self.widht},洗衣机的高度{self.height}')#2.创建对象,创建多个对象且属性值不同:调用实例方法
haier1 = Washer(10,20)
haier1.print_info()haier2 = Washer(100,200)
haier2.print_info()
_str_()
当使用print输出对象打的时候,默认打印对象的内存地址。如果类定义了_str_方法,那么就会打印从在这个方法中return的数据。
class Washer():def __init__(self):self.width = 300def __str__(self):return '解释说明:类的说明或对象状态的说明'haier = Washer()
print(haier) #解释说明:类的说明或对象状态的说明
_del_() 当删除对象时,python解释器也会默认调用_del_()_方法
class Washer():def __init__(self):self.width = 300#自动调用def __del__(self):print('对象一已经删除')haier = Washer()
面向对象综合应用 1.烤地瓜 需求:
1.被烤的时间和对应的地瓜状态 0-3分钟:生的 3-5分钟:半生熟 5-8分钟:熟的 超过8分钟:烤糊了 2.添加调料 用户按自己的意愿添加调用
步骤分析
定义类 地瓜的属性 被烤的时间 地瓜的状态 添加的调料 地瓜的方法 被烤 用户根据意愿设定每次烤地瓜的时间 判断地瓜被烤的总时间是在哪个区间,修改地瓜状态 添加调料 用户根据意愿设定添加的调料 将用户添加的调料存储 显示对象信息
#1.定义类:初始化属性、被烤和添加调料的方法、显示对象信息的str
class SweetPotato():def __init__(self):#定义属性:成员变量#被烤的时间self.cook_time = 0#烤的状态self.cook_state = '生的'#调料列表self.condiments = []#定义方法:成员函数def cook(self,time):"""烤地瓜方法"""#1.先计算地瓜整体考过的时间self.cook_time += time#2.用整体烤过的时间在判断地瓜的状态if 0 <= self.cook_time < 3:#生的self.cook_state = '生的'elif 3 <= self.cook_time <5:#半生不熟self.cook_state = '半生不熟'elif 5 <= self.cook_time < 8:#熟了self.cook_state = '熟了'elif self.cook_time >= 8:#烤糊了self.cook_state = '烤糊了'def add_condiments(self,condiment):#用户意愿的调料追加到调料列表self.condiments.append(condiment)def __str__(self):return f'这个地瓜的被烤过的时间是{self.cook_time}分钟,' \f'状态是{self.cook_state},调料有{self.condiments}'#2.创建对象并调用对应的实例方法
digua1 = SweetPotato()
print(digua1)digua1.cook(2)
digua1.add_condiments('辣椒')
print(digua1)#多次调用测试时间是否相加
digua1.cook(2)
digua1.add_condiments('酱油')
print(digua1)
2.搬家具     需求
将小于房子剩余面积的家具摆放到房子中
步骤分析
需求涉及两个事务:房子和家具,故该案例涉及两个类:房子类和家具类
定义房子类
实例属性 房子地理位置 房子占地面积 房子剩余面积 房子内家具列表 实例方法 容纳家具 显示房屋信息
定义家具类
家具名称 家具占地面积
创建对象并调用相关方法
#家具类
class Furniture():def __init__(self,name,area):#家具名字self.name = name#家具占地面积self.area = area
#定义房屋类
class Home():def __init__(self,address,area):#地理位置self.address = address#房屋面积self.area = area#剩余面积self.free_area = area#家具列表self.furniture = []def __str__(self):return f'房子地理位置在{self.address},' \f'房屋面积是{self.area},剩余面积{self.free_area},家具有{self.furniture}'def add_furniture(self,item):"""容纳家具"""#如果 家具占地面积 <= 房子剩余面积: 可以搬入(家具列表添加家具名字数据并将房子剩余面积更新:# 房屋剩余面积 - 该家具的占地面积# 否则:提示用户家具太大,剩余面积不足,无法容纳# )if item.area <= self.free_area:self.furniture.append(item.name)self.free_area -= item.areaelse:print('用户家具太大,剩余面积不足,无法容纳')#双人床, 6
bed = Furniture('双人床',6)
sofa = Furniture('沙发',10)#房子1:北京 2.上海
jia1 = Home('北京',1000)
print(jia1)#开始般家具
jia1.add_furniture(bed)
print(jia1)ball = Furniture('游泳池',2000)
jia1.add_furniture(ball)
print(jia1)

面向对象基础总结

类 创建类
class 类名():     代码
对象
对象名 = 类名()
添加对象属性 类外面
对象名 = 类名
类里面
self.属性名 = 值
获取对象属性 类外面
对象名.属性名
类里面
self.属性名

魔法方法

_init_():初始化 _str_():输出对象信息 _del_():删除对象时调用
注意:魔法方法不需要手动调用,它默认会自动调用。

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
IHome主页 - 让你的浏览... 随着互联网的发展,人们越来越离不开浏览器了。每天上班、学习、娱乐,浏览器...
TCP 协议 一、TCP 协议概念 TCP即传输控制协议(Transmission Control ...
营业执照的经营范围有哪些 营业执照的经营范围有哪些 经营范围是指企业可以从事的生产经营与服务项目,是进行公司注册...
C++ 可变体(variant... 一、可变体(variant) 基础用法 Union的问题: 无法知道当前使用的类型是什...
血压计语音芯片,电子医疗设备声... 语音电子血压计是带有语音提示功能的电子血压计,测量前至测量结果全程语音播报࿰...
MySQL OCP888题解0... 文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3...
【2023-Pytorch-检... (肆十二想说的一些话)Yolo这个系列我们已经更新了大概一年的时间,现在基本的流程也走走通了,包含数...
实战项目:保险行业用户分类 这里写目录标题1、项目介绍1.1 行业背景1.2 数据介绍2、代码实现导入数据探索数据处理列标签名异...
记录--我在前端干工地(thr... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前段时间接触了Th...
43 openEuler搭建A... 文章目录43 openEuler搭建Apache服务器-配置文件说明和管理模块43.1 配置文件说明...