封装

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

案例一:小明爱跑步

需求:

  1. 小明体重75.0公斤
  2. 小明每次跑步减肥0.5公斤
  3. 小明每次吃东西增加1公斤
Person
属性 name
weight
方法 __init__(self, name, weight):
__str__(self):
run(self):
ear(self):
class Person:def __init__(self, name, weight):self.name = nameself.weight = weightdef __str__(self):return "我的名字叫%s,我的体重是:%.2f" % (self.name, self.weight)def eat(self):print("%s 吃了一顿饭" % self.name)self.weight += 1def run(self):print("%s 围着操场跑了几圈 " % self.name)self.weight -= 0.5ming = Person(name="小明", weight=75.0)
ming.eat()
ming.run()
ming.eat()
ming.run()
ming.run()
print(ming)

运行结果:

案例二:小明爱跑步扩展—小美也爱跑步

需求:

  1. 小明和小美都爱跑步
  2. 小明体重75.0公斤
  3. 小妹体重45.0公斤
  4. 每次跑步都会减少0.5公斤
  5. 每次吃东西都会增加1公斤
person
属性 name
weight
方法 __init__(self, name, weight):
__str__(self):
run(self):
ear(self):

提示:

  1. 在对象的方法内部,是可以直接访问对象的属性的
  2. 同一个类创建多个对象之间,属性互不干扰
class Person:def __init__(self, name, weight):self.name = nameself.weight = weightdef __str__(self):return "我的名字叫%s,我的体重是:%.2f" % (self.name, self.weight)def eat(self):print("%s 吃了一顿饭" % self.name)self.weight += 1def run(self):print("%s 围着操场跑了几圈 " % self.name)self.weight -= 0.5ming = Person(name="小明", weight=75.0)
ming.run()
ming.eat()
print(ming)
mei = Person(name="小美", weight=45.0)
mei.eat()
mei.run()
print(mei)
print(ming)

运行结果:

案例三:摆放家具

需求:

1.房子(House)有户型、总面积 和 家具名称列表

  • 新房子没有任何的加据
    2.家具(HouseItem)有名字和占地面积,其中
  • 席梦思(bed) 占地4平米
  • 衣柜(chest) 占地2平米
  • 餐桌(table) 占地1.5平米

3.将以上三件加据添加到房子里

4.打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表

House
属性 houst_type
area
free_area
item
方法 __init__(self, house_type, area):
__str__(self):
add_item(self, item) :
HouseItem
属性 name
area
方法 __init__(self, name, area):
__str__(self):

剩余面积:
1.在创建房子对象时,定义一个剩余面积的属性,初始值和总面积相等
2.在调用add_item方法,向房间添加家具时候,让剩余面积 -= 家具面积

class HouseItem:def __init__(self, name, area):self.name = nameself.area = areadef __str__(self):return "%s的占地面积为%.2f" % (self.name, self.area)class House:def __init__(self, layout, all_area):self.layout = layoutself.all_area = all_areaself.remain_area = all_areaself.item = []def __str__(self):return "这是一个%s的房子,总面积为%.2f,有家具%s,剩余面积为%.2f" \% (self.layout, self.all_area,'、'.join(self.item), self.remain_area)def add_item(self, item):if item.area > self.remain_area:print(" 剩余面积不足,%s无法添加" % item.name)returnelse:self.item.append(item.name)self.remain_area -= item.areabed = HouseItem(name="席梦思", area=4)
chest = HouseItem(name="衣柜", area=2)
table = HouseItem(name="餐桌", area=1.5)house = House(layout="三室两厅", all_area=90)
house.add_item(bed)
house.add_item(chest)
house.add_item(table)
print(house)

运行结果:

案例四:士兵突击

需求:

  1. 士兵许三多有一把AK47
  2. 士兵可以开火
  3. 枪能够发射子弹
  4. 强能够装填子弹——增加子弹数量
Soldier
属性 name
gun
方法 __init(self)__
fire(self)
Gun
属性 model
bullet_count
方法 __init__(self, model)
add_bullet(self, count)
shoot(self)
class Gun:def __init__(self, model):# 枪的型号self.model = model# 子弹的数量self.bullet_count = 0def add_bullet(self, count):# 上弹self.bullet_count += countdef shoot(self):# 判断有无子弹if self.bullet_count <= 0:print("%s 没有子弹了..." % self.model)return# 发射子弹self.bullet_count -= 1# 提示发射信息print("%s 突突突... 剩余子弹为:%d" % (self.model, self.bullet_count))class Soldier:def __init__(self, name):# 假设新兵没有枪,可以用None初始化gunself.gun is Noneself.name = namedef fire(self):# 判断士兵是否有枪if self.gun == 0:print("%s的还没有枪!!!" % self.name)return# 高喊口含print("冲啊!!")# 装弹self.gun.add_bullet(30)# 射击self.gun.shoot()# 定义枪对象
ak47 = Gun("AK47")
# 定义士兵对象
xsd = Soldier("许三多")
xsd.gun = ak47
print(xsd.gun)
xsd.fire()

执行结果:

面向对象(Python):学习笔记之封装相关推荐

  1. python学习笔记 day25 封装

    1. 封装 广义面向对象的封装是为了代码的保护,只让自己的对象调用自己的方法: 狭义的封装是把属性,方法隐藏起来,只供内部调用,不让外部调用: 1. 私有属性--- 在类内部使用__私有属性名 来定义 ...

  2. Python学习笔记(十九)面向对象 - 继承

    Python学习笔记(十九)面向对象 - 继承 一.继承的概念 # 继承:子类继承父类的所有方法和属性# 1. 子类 class A(object):def __init__(self):self.n ...

  3. Python学习笔记:Day 16 编写移动App

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  4. Python学习笔记:Day 10 用户注册和登陆

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  5. Python学习笔记:Day 9 编写API

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  6. Python学习笔记:Day5 编写web框架

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  7. Python学习笔记:Day 3编写ORM

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  8. Python学习笔记:异步IO(2)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  9. Python学习笔记:常用第三方模块3

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  10. python学习笔记4(对象/引用;多范式; 上下文管理器)

    python学习笔记4(对象/引用:多范式; 上下文管理器) ### Python的强大很大一部分原因在于,它提供有很多已经写好的,可以现成用的对象 21. 动态类型:对象/引用 对象和引用: 对象是 ...

最新文章

  1. 桌子上有个盘子_日本留学生活:留学生在餐厅刷盘子的传闻,竟然在自己身上上演...
  2. packet tracer使用心得(二)
  3. vscode markdown-all-in-one 源码编译成vsix
  4. HDU1010 Tempter of the Bone dfs(奇偶减枝)
  5. svn 单独导出某一个目录文件
  6. Nginx的五大应用场景详解
  7. Linux system函数返回值
  8. mysql 首次连接慢_mybatis+mysql,第一次数据库连接很慢怎么回事?
  9. 在工作中常用到的SQL
  10. JVM调优参数简介、调优目标及调优经验
  11. C语言实现根据用户输入的整数求和(两种方法)
  12. centos离线安装docker-ce 18.03.0-ce
  13. 一个能和企鹅一样飞的创意
  14. hotmail 获取邮箱授权码
  15. Android各种模拟器使用笔记
  16. mysql数据倾斜_Hive SQL 数据倾斜总结
  17. SAP Marketing Cloud 功能概述(三)
  18. 人才辈出各领风骚 中国股市十大操盘手排行榜
  19. 风向值与风向描述定义
  20. 腾讯 Tars 开源 Go 版本 Tars-Go,并发性能比 gRPC 高 5 倍

热门文章

  1. 7. Linux 环境
  2. 33. 深入解析互联网协议的原理
  3. JAVA wait(), notify(),sleep详解
  4. QAliber - 介绍一款开源的GUI自动化测试工具
  5. vue-cli webpack浅析
  6. 通过Visual Studio 2012 比较SQL Server 数据库的架构变更
  7. (转帖)如何在DE2上安裝μClinux作業系統? (Nios II )
  8. 微信小程序——风水罗盘
  9. 时间操作(JavaScript版)—页面显示格式:年月日星期几
  10. JAVA随机数生成 | Math.random()方法 | 随机生成int、double类型