Python面向对象封装操作案例详解


Posted in Python onDecember 31, 2019

本文实例讲述了Python面向对象封装操作。分享给大家供大家参考,具体如下:

目标

封装
小明爱跑步
存放家具

01. 封装

封装 是面向对象编程的一大特点
面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中
外界 使用 类 创建 对象,然后 让对象调用方法
对象方法的细节 都被 封装 在 类的内部

02. 小明爱跑步

需求

小明 体重 75.0 公斤
小明每次 跑步 会减肥 0.5 公斤
小明每次 吃东西 体重增加 1 公斤
Python面向对象封装操作案例详解
提示:在 对象的方法内部,是可以 直接访问对象的属性 的!

代码实现:

class Person:
  """人类"""

  def __init__(self, name, weight):

    self.name = name
    self.weight = weight

  def __str__(self):

    return "我的名字叫 %s 体重 %.2f 公斤" % (self.name, self.weight)

  def run(self):
    """跑步"""

    print("%s 爱跑步,跑步锻炼身体" % self.name)
    self.weight -= 0.5

  def eat(self):
    """吃东西"""

    print("%s 是吃货,吃完这顿再减肥" % self.name)
    self.weight += 1


xiaoming = Person("小明", 75)

xiaoming.run()
xiaoming.eat()
xiaoming.eat()

print(xiaoming)

2.1 小明爱跑步扩展 —— 小美也爱跑步

需求

小明 和 小美 都爱跑步
小明 体重 75.0 公斤
小美 体重 45.0 公斤
每次 跑步 都会减少 0.5 公斤
每次 吃东西 都会增加 1 公斤
Python面向对象封装操作案例详解
提示

在 对象的方法内部,是可以 直接访问对象的属性 的
同一个类 创建的 多个对象 之间,属性 互不干扰!
Python面向对象封装操作案例详解

03. 摆放家具

需求

房子(House) 有 户型、总面积 和 家具名称列表
新房子没有任何的家具
家具(HouseItem) 有 名字 和 占地面积,其中
席梦思(bed) 占地 4 平米
衣柜(chest) 占地 2 平米
餐桌(table) 占地 1.5 平米
将以上三件 家具 添加 到 房子 中
打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表
Python面向对象封装操作案例详解
剩余面积

在创建房子对象时,定义一个 剩余面积的属性,初始值和总面积相等
当调用 add_item 方法,向房间 添加家具 时,让 剩余面积 -= 家具面积
思考:应该先开发哪一个类?

答案 —— 家具类

家具简单
房子要使用到家具,被使用的类,通常应该先开发

3.1 创建家具

class HouseItem:

  def __init__(self, name, area):
    """

    :param name: 家具名称
    :param area: 占地面积
    """
    self.name = name
    self.area = area

  def __str__(self):
    return "[%s] 占地面积 %.2f" % (self.name, self.area)


# 1. 创建家具
bed = HouseItem("席梦思", 4)
chest = HouseItem("衣柜", 2)
table = HouseItem("餐桌", 1.5)

print(bed)
print(chest)
print(table)

小结

创建了一个 家具类,使用到 initstr 两个内置方法
使用 家具类 创建了 三个家具对象,并且 输出家具信息

3.2 创建房间

class House:

  def __init__(self, house_type, area):
    """

    :param house_type: 户型
    :param area: 总面积
    """
    self.house_type = house_type
    self.area = area
    
    # 剩余面积默认和总面积一致
    self.free_area = area
    # 默认没有任何的家具
    self.item_list = []

  def __str__(self):

    # Python 能够自动的将一对括号内部的代码连接在一起
    return ("户型:%s\n总面积:%.2f[剩余:%.2f]\n家具:%s"
        % (self.house_type, self.area,
          self.free_area, self.item_list))

  def add_item(self, item):

    print("要添加 %s" % item)

...

# 2. 创建房子对象
my_home = House("两室一厅", 60)

my_home.add_item(bed)
my_home.add_item(chest)
my_home.add_item(table)

print(my_home)

小结

创建了一个 房子类,使用到 initstr 两个内置方法
准备了一个 add_item 方法 准备添加家具
使用 房子类 创建了 一个房子对象
让 房子对象 调用了三次 add_item 方法,将 三件家具 以实参传递到 add_item 内部

3.3 添加家具

需求

1> 判断 家具的面积 是否 超过剩余面积,如果超过,提示不能添加这件家具
2> 将 家具的名称 追加到 家具名称列表 中
3> 用 房子的剩余面积 - 家具面积

def add_item(self, item):

    print("要添加 %s" % item)
    # 1. 判断家具面积是否大于剩余面积
    if item.area > self.free_area:
      print("%s 的面积太大,不能添加到房子中" % item.name)

      return

    # 2. 将家具的名称追加到名称列表中
    self.item_list.append(item.name)

    # 3. 计算剩余面积
    self.free_area -= item.area

3.4 小结

主程序只负责创建 房子 对象和 家具 对象
让 房子 对象调用 add_item 方法 将家具添加到房子中
面积计算、剩余面积、家具列表 等处理都被 封装 到 房子类的内部

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python爬虫爬取快手视频多线程下载功能
Feb 28 Python
python如何读写json数据
Mar 21 Python
python Web开发你要理解的WSGI & uwsgi详解
Aug 01 Python
python一键去抖音视频水印工具
Sep 14 Python
对Python定时任务的启动和停止方法详解
Feb 19 Python
python远程连接MySQL数据库
Apr 19 Python
opencv转换颜色空间更改图片背景
Aug 20 Python
Python 脚本拉取 Docker 镜像问题
Nov 10 Python
Python 实现Numpy中找出array中最大值所对应的行和列
Nov 26 Python
使用pyshp包进行shapefile文件修改的例子
Dec 06 Python
使用openCV去除文字中乱入的线条实例
Jun 02 Python
pytorch 两个GPU同时训练的解决方案
Jun 01 Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
Dec 31 #Python
Python面向对象之私有属性和私有方法应用案例分析
Dec 31 #Python
Pycharm最新激活码2019(推荐)
Dec 31 #Python
python ftplib模块使用代码实例
Dec 31 #Python
深入了解如何基于Python读写Kafka
Dec 31 #Python
Python面向对象之继承原理与用法案例分析
Dec 31 #Python
pytorch中nn.Conv1d的用法详解
Dec 31 #Python
You might like
php递归创建目录的方法
2015/02/02 PHP
php操作redis常见方法示例【key与value操作】
2020/04/14 PHP
php输出形式实例整理
2020/05/05 PHP
Jquery 动态添加按钮实现代码
2010/05/06 Javascript
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
2012/02/03 Javascript
javascript学习笔记(一) 在html中使用javascript
2012/06/18 Javascript
jQuery隔行变色与普通JS写法的对比
2013/04/21 Javascript
div当滚动到页面顶部的时候固定在顶部实例代码
2013/05/27 Javascript
js获取元素相对窗口位置的实现代码
2014/09/28 Javascript
javascript使用smipleChart实现简单图表
2015/01/02 Javascript
jquery简单实现图片切换效果的方法
2015/05/12 Javascript
Bootstrap每天必学之级联下拉菜单
2016/03/27 Javascript
JavaScript实现邮箱地址自动匹配功能代码
2016/11/28 Javascript
JS异步函数队列功能实例分析
2017/11/28 Javascript
浅谈vuex 闲置状态重置方案
2018/01/04 Javascript
使用 vue.js 构建大型单页应用
2018/02/10 Javascript
angular2模块和共享模块详解
2018/04/08 Javascript
ES6使用 Array.includes 处理多重条件用法实例分析
2020/03/02 Javascript
浅谈JS for循环中使用break和continue的区别
2020/07/21 Javascript
javascript实现移动端上传图片功能
2020/08/18 Javascript
[01:14:41]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第一场 1月8日
2021/03/11 DOTA
python中import学习备忘笔记
2017/01/24 Python
Python编程修改MP3文件名称的方法
2017/04/19 Python
Python调用微信公众平台接口操作示例
2017/07/08 Python
一些Centos Python 生产环境的部署命令(推荐)
2018/05/07 Python
python买卖股票的最佳时机(基于贪心/蛮力算法)
2019/07/05 Python
PyTorch中Tensor的维度变换实现
2019/08/18 Python
Jupyter Notebook 实现正常显示中文和负号
2020/04/24 Python
为什么是 Python -m
2020/06/19 Python
家居装修公司创业计划书范文
2014/03/20 职场文书
2014年最新个人对照检查材料范文
2014/09/25 职场文书
质量保证书格式
2015/02/27 职场文书
社区活动总结范文
2015/05/07 职场文书
《蓝鲸的眼睛》读后感5篇
2020/01/15 职场文书
Python之基础函数案例详解
2021/08/30 Python
MySQL插入数据与查询数据
2022/03/25 MySQL