2.Python封装练习及私有属性
面向对象三大特性
封装:根据职责将属性和方法封装到一个抽象的类中
继承:实现代码的重用,相同代码不需要重复的编写
1.单继承
2.多继承
多态:不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度
面向对象--封装
封装是面向对象一大特点
面向对象编程的第一步--将属性和方法封装到一个抽象的类中
外界使用类创建对象,然后让对象调用方法
对象方法的细节,都被封装中类的内部
在对象的方法内部,是可以直接访问对象的属性的
在同一个类创建多个对象之间,属性互不干扰
一个对象的属性,可以是另外一个类创建的对象
练习一:
# 姓名:jack 体重:120 吃饭:+30kg 跑步:-10kg
# 新增用户 Ben,其他需求同上
练习二
# 1.房子(House) 有户型、总面积 和家具名称列表,新房子没有任何家具
2.家具(Houseltem)有名字 和占地面积,其中 席梦思(bed)占地4平米,衣柜(chest)占地2平米,餐桌(table)占地1.5平米
3.将以上三件家具 添加到房子中
4.打印房子时,要求输出 户型、总面积、剩余面积、家具名称列表
思路:
新房子没有家具,所以需要后续添加,此需求需要定义两个类,一个家具类,一个房子类,由于房子需要使用到家具,所以在开发中,被使用的类,通常应该先开发,在房子类中添加家具,计算面积,输出信息
1.创建家具类
2.创建房子类
3.在房子类中添加家具,计算剩余面积,输出信息
练习三
#1.每一个新兵都没有枪
#2.可以给新兵装配枪
#3.士兵可以开火
#4.枪能够发射子弹
#5.枪能够装填子弹--增加子弹数量
思路分析:士兵许三多有一把AK47,士兵类应该有一个枪的属性,枪是由枪类创建出来的对象,士兵的方法有开火,枪的方法有发射子弹、装填子弹,需要先创建一个枪类,再创建一个士兵类,哪个类被使用,就先创建哪个类
1.创建枪类/装填子弹/发射子弹
#2.创建士兵类
在定义属性时,如果不知道设置什么初始值,可以设置为None,表示一个空对象,没有方法和属性,是一个特殊的常量
3.完成开火
身份运算符
身份运算符用于比较两个对象的内存地址是否一致--是否是对同一个对象的引用
在python中,针对None比时,建议使用is 判断
is 与 == 区别:
is用于判断两个变量引用对象是否为同一个
==用于判断引用变量的值是否相等
私有属性和私有方法
应用场景
在实际开发中,对象的某些属性或方法可能只希望中对象的内部被使用,而不希望在外部被访问到
私有属性就是对象不希望公开的属性
私有方法就是对象不希望公开的方法
定义方式
在定义属性或方法时,在属性名或者方法名前增两个下划线,定义的就是私有属性或方法
私有属性
当age设置成私有属性时,在对象的方法内部可以访问,但是在外界不能直接访问
私有方法
在方法名前加__,外界不能直接访问
伪私有属性和私有方法
在python中,并没有真正意义的私有
私有属性、方法在给属性、方法命名时,实际是对名称做了一些特殊处理,使得外界无法访问到
对名称处理方法:
属性: _类名__属性名 例如 __age 处理成 _Women__age
方法:_类名__方法名 例如__secret 处理成_Women__secret()
使用格式处理后的名称,依然可以访问私有属性,在日常开发中,不建议使用这种方式访问对象的私有属性和私有方法
风月都好看,人间也浪漫.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具