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 相关文章推荐
Python2.X/Python3.X中urllib库区别讲解
Dec 19 Python
Python中常见的异常总结
Feb 20 Python
Python基于xlrd模块操作Excel的方法示例
Jun 21 Python
程序员写Python时的5个坏习惯,你有几条?
Nov 26 Python
python将txt文档每行内容循环插入数据库的方法
Dec 28 Python
Python使用Pickle模块进行数据保存和读取的讲解
Apr 09 Python
python实现从wind导入数据
Dec 03 Python
python几种常用功能实现代码实例
Dec 25 Python
python3中使用__slots__限定实例属性操作分析
Feb 14 Python
django的autoreload机制实现
Jun 03 Python
python 实现一个简单的线性回归案例
Dec 17 Python
Python中的xlrd模块使用整理
Jun 15 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
弄了个检测传输的参数是否为数字的Function
2006/12/06 PHP
joomla内置的表单验证功能使用方法
2010/06/11 PHP
《PHP编程最快明白》第七讲:php图片验证码与缩略图
2010/11/01 PHP
PHP获取数组中某元素的位置及array_keys函数应用
2013/01/29 PHP
PHP封装CURL扩展类实例
2015/07/28 PHP
PHP中利用sleep函数实现定时执行功能实现代码
2016/08/25 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
2017/08/02 PHP
Laravel框架查询构造器 CURD操作示例
2019/09/04 PHP
表单JS弹出填写提示效果代码
2011/04/16 Javascript
关于火狐(firefox)及ie下event获取的两种方法
2012/12/27 Javascript
jquery实现弹出窗口效果的实例代码
2013/11/28 Javascript
JS动态调用方法名示例介绍
2013/12/18 Javascript
Bootstrap CSS组件之按钮组(btn-group)
2016/12/17 Javascript
javascript中的数据类型检测方法详解
2019/08/07 Javascript
vue 强制组件重新渲染(重置)的两种方案
2019/10/29 Javascript
JavaScript实现Excel表格效果
2020/02/07 Javascript
Vue用mixin合并重复代码的实现
2020/11/27 Vue.js
[04:10]2016国际邀请赛中国区预选赛第二日TOP10精彩集锦
2016/06/28 DOTA
Python Matplotlib库入门指南
2015/05/18 Python
Python随手笔记第一篇(2)之初识列表和元组
2016/01/23 Python
python处理html转义字符的方法详解
2016/07/01 Python
Python自动化测试ConfigParser模块读写配置文件
2016/08/15 Python
django文档学习之applications使用详解
2018/01/29 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
2019/01/04 Python
Python 2/3下处理cjk编码的zip文件的方法
2019/04/26 Python
pytorch实现用CNN和LSTM对文本进行分类方式
2020/01/08 Python
CSS3制作皮卡丘动画壁纸的示例
2020/11/02 HTML / CSS
为智能设备设计个性化保护套网站:caseable
2017/01/05 全球购物
雅萌 (YA-MAN) :日本美容家电领域的龙头企业
2017/05/12 全球购物
临床医师专业个人自我评价
2014/01/08 职场文书
奥巴马演讲稿
2014/01/08 职场文书
教师党员一句话承诺
2014/03/28 职场文书
2014年秋季开学寄语
2014/08/02 职场文书
美国旅游签证工作证明
2014/10/14 职场文书
焦点访谈观后感
2015/06/11 职场文书
八年级地理课件资料及考点知识分享
2019/08/30 职场文书