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实现选择排序
Jun 04 Python
tensorflow实现对图片的读取的示例代码
Feb 12 Python
Python基于递归算法求最小公倍数和最大公约数示例
Jul 27 Python
Python函数any()和all()的用法及区别介绍
Sep 14 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
Oct 11 Python
Django使用中间件解决前后端同源策略问题
Sep 02 Python
python 魔法函数实例及解析
Sep 25 Python
python+Django+pycharm+mysql 搭建首个web项目详解
Nov 29 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
Apr 16 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
Jul 28 Python
Python内置函数property()如何使用
Sep 01 Python
Python使用MapReduce进行简单的销售统计
Apr 22 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
fgetcvs在linux的问题
2012/01/15 PHP
php 字符串压缩方法比较示例
2014/01/23 PHP
分享下页面关键字抓取components.arrow.com站点代码
2014/01/30 PHP
浅析PHP的静态成员函数效率更高的原因
2014/06/13 PHP
thinkPHP模型初始化实例分析
2015/12/03 PHP
Laravel 添加多语言提示信息的方法
2019/09/29 PHP
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
Angularjs中如何使用filterFilter函数过滤
2016/02/06 Javascript
在页面中输出当前客户端时间javascript实例代码
2016/03/02 Javascript
原生JS封装Ajax插件(同域、jsonp跨域)
2016/05/03 Javascript
JS对HTML表格进行增删改操作
2016/08/22 Javascript
bootstrap datepicker限定可选时间范围实现方法
2016/09/28 Javascript
Angular 4依赖注入学习教程之ValueProvider的使用(七)
2017/06/04 Javascript
JS实现快递单打印功能【推荐】
2018/06/21 Javascript
vue-resource请求实现http登录拦截或者路由拦截的方法
2018/07/11 Javascript
记一次webapck4 配置文件无效的解决历程
2018/09/19 Javascript
vue生命周期和react生命周期对比【推荐】
2018/09/19 Javascript
总结javascript三元运算符知识点
2018/09/28 Javascript
通过layer实现可输入的模态框的例子
2019/09/27 Javascript
webpack 动态批量加载文件的实现方法
2020/03/19 Javascript
Express 配置HTML页面访问的实现
2020/11/01 Javascript
[02:16]卖萌的僵尸 DOTA2神话信使飞僵小宝来袭
2014/03/24 DOTA
详解django三种文件下载方式
2018/04/06 Python
Python实现的生产者、消费者问题完整实例
2018/05/30 Python
python3.7 的新特性详解
2019/07/25 Python
Python的几种主动结束程序方式
2019/11/22 Python
用Python画小女孩放风筝的示例
2019/11/23 Python
Keras自动下载的数据集/模型存放位置介绍
2020/06/19 Python
深入分析python 排序
2020/08/24 Python
小学教师节活动方案
2014/01/31 职场文书
城市精细化管理实施方案
2014/03/04 职场文书
文化与传播毕业生求职信
2014/03/09 职场文书
学校总务处领导班子民主生活会对照检查材料思想汇报
2014/09/27 职场文书
共青团优秀团员申请书(范文)
2019/08/15 职场文书
python数据可视化JupyterLab实用扩展程序Mito
2021/11/20 Python
Android开发手册TextInputLayout样式使用示例
2022/06/10 Java/Android