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中操作列表之List.pop()方法的使用
May 21 Python
Python简单调用MySQL存储过程并获得返回值的方法
Jul 20 Python
Python在线运行代码助手
Jul 15 Python
Python 递归函数详解及实例
Dec 27 Python
对Python 3.2 迭代器的next函数实例讲解
Oct 18 Python
Python实现的排列组合、破解密码算法示例
Apr 12 Python
深入了解Python iter() 方法的用法
Jul 11 Python
python实现简单聊天室功能 可以私聊
Jul 12 Python
django drf框架中的user验证以及JWT拓展的介绍
Aug 12 Python
3分钟看懂Python后端必须知道的Django的信号机制
Jul 26 Python
如何理解及使用Python闭包
Jun 01 Python
关于Numpy之repeat、tile的用法总结
Jun 02 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
如何在WIN2K下安装PHP4.04
2006/10/09 PHP
PHP与Java进行通信的实现方法
2013/10/21 PHP
PHP简单遍历对象示例
2016/09/28 PHP
Yii框架弹出窗口组件CJuiDialog用法分析
2017/01/07 PHP
PHP getNamespaces()函数讲解
2019/02/03 PHP
JavaScript 空位补零实现代码
2010/02/26 Javascript
js获取网页高度(详细整理)
2012/12/28 Javascript
Javascript的时间戳和php的时间戳转换注意事项
2013/04/12 Javascript
javaScript NameSpace 简单说明介绍
2013/07/18 Javascript
Javascript 颜色渐变效果的实现代码
2013/10/01 Javascript
Flexigrid在IE下不显示数据的处理的解决方法
2013/10/24 Javascript
使用js实现数据格式化
2014/12/03 Javascript
javascript中checkbox使用方法实例演示
2015/11/19 Javascript
Bootstrap和Angularjs配合自制弹框的实例代码
2016/08/24 Javascript
一个非常好用的文字滚动的案例,鼠标悬浮可暂停[两种方案任选]
2016/12/01 Javascript
jQuery获取table下某一行某一列的值实现代码
2017/04/07 jQuery
Node.js简单入门前传
2017/08/21 Javascript
微信小程序实现城市列表选择
2018/06/05 Javascript
在Vant的基础上封装下拉日期控件的代码示例
2018/12/05 Javascript
Vue.js下拉菜单组件使用方法详解
2019/10/19 Javascript
[01:46]辉夜杯—打造中国DOTA新格局
2015/12/25 DOTA
Django 导出 Excel 代码的实例详解
2017/08/11 Python
python 用lambda函数替换for循环的方法
2018/06/09 Python
Python 中的range(),以及列表切片方法
2018/07/02 Python
Python 运行.py文件和交互式运行代码的区别详解
2019/07/02 Python
详解pandas中MultiIndex和对象实际索引不一致问题
2019/07/23 Python
python实现吃苹果小游戏
2020/03/21 Python
在jupyter notebook 添加 conda 环境的操作详解
2020/04/10 Python
css3实现的多级渐变下拉菜单导航效果代码
2015/08/31 HTML / CSS
Belle Maison倍美丛官网:日本千趣会旗下邮购网站
2016/07/22 全球购物
Spartoo西班牙官网:法国时尚购物网站
2018/03/27 全球购物
国贸专业大学生职业生涯规划范文
2014/01/10 职场文书
普通简短的个人自我评价
2014/02/15 职场文书
优秀教师先进个人事迹材料
2014/08/31 职场文书
困难补助申请报告
2015/05/19 职场文书
python实现高效的遗传算法
2021/04/07 Python