面向对象封装案例

封装

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

一个对象的属性可以是另一个类创建的对象

跑步案例

单对象案例

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("今天跑步了,又能瘦一点了")
self.weight -= 0.5 def eat(self):
print("吃了一顿,又要胖了,唉")
self.weight += 1 xiaoming = Person("小明", 75.0)
print(xiaoming)
xiaoming.run()
xiaoming.eat()
print(xiaoming) # 小明 的体重是 75.00
# 今天跑步了,又能瘦一点了
# 吃了一顿,又要胖了,唉
# 小明 的体重是 75.50

一个类创建多个对象案例

多个对象属性之间互不干扰;即小美跑步和吃东西并不影响小明的体重;

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.0)
xiaoming.run()
xiaoming.eat() print(xiaoming) xiaohong = Person("小红", 45.0)
xiaohong.run()
xiaohong.eat() print(xiaohong)

家具案例

被使用的类应该先开发;

房子中要有家具,所以在开发房子前应该先开发家具类;

定义家具类

class HouseItem:
def __init__(self, name, area):
self.name = name
self.area = area def __str__(self):
return "%s 占地 %.2f" % (self.name, self.area) bed = HouseItem("席梦思", 4)
chest = HouseItem("衣柜", 2)
table = HouseItem("桌子", 1.5) print(bed)
print(chest)
print(table) # 席梦思 占地 4.00
# 衣柜 占地 2.00
# 桌子 占地 1.50

定义房子类

class HouseItem:
def __init__(self, name, area):
self.name = name
self.area = area def __str__(self):
return "%s 占地 %.2f" % (self.name, self.area) class House:
def __init__(self, house_type, area):
self.house_type = house_type
self.area = area
# 剩余面积和家具列表
self.free_area = area
self.house_item = [] def __str__(self):
# python能够自动将一对括号内的代码连接在一起
return ("户型:%s, 总面积:%.2f, 剩余面积:%.2f, 家具:%s"
% (self.house_type, self.area, self.free_area, self.house_item)) def add_item(self, item):
print("要添置 %s" % item) # 创建家具
bed = HouseItem("席梦思", 4)
chest = HouseItem("衣柜", 2)
table = HouseItem("桌子", 1.5) # 创建房子
my_house = House("两室一厅", 80)
my_house.add_item(bed)
my_house.add_item(chest)
my_house.add_item(table) print(my_house) # 要添置 席梦思 占地 4.00
# 要添置 衣柜 占地 2.00
# 要添置 桌子 占地 1.50
# 户型:两室一厅, 总面积:80.00, 剩余面积:80.00, 家具:[]

添置家具代码的完成

添置家具前先判断,家具是否超过空闲面积,如果太大就不添置;再进行添置下一件,小的则添置进去。

class HouseItem:
def __init__(self, name, area):
self.name = name
self.area = area def __str__(self):
return "%s 占地 %.2f" % (self.name, self.area) class House:
def __init__(self, house_type, area):
self.house_type = house_type
self.area = area
# 剩余面积和家具列表
self.free_area = area
self.house_item = [] def __str__(self):
# python能够自动将一对括号内的代码连接在一起
return ("户型:%s, 总面积:%.2f, 剩余面积:%.2f, 家具:%s"
% (self.house_type, self.area, self.free_area, self.house_item)) def add_item(self, item):
print("要添置 %s" % item)
# 判断家具面积
if item.area >= self.free_area:
print("%s 的面积太大,无法放下" % item)
return
# 将家具名称放在家具列表中
self.house_item.append(item.name) # 计算剩余面积
self.free_area -= item.area # 创建家具
bed = HouseItem("席梦思", 15)
chest = HouseItem("衣柜", 9)
table = HouseItem("桌子", 8) # 创建房子
my_house = House("三室一厅", 80)
my_house.add_item(bed)
my_house.add_item(chest)
my_house.add_item(table) print(my_house) # 要添置 席梦思 占地 15.00
# 要添置 衣柜 占地 9.00
# 要添置 桌子 占地 8.00
# 户型:三室一厅, 总面积:80.00, 剩余面积:48.00, 家具:['席梦思', '衣柜', '桌子']

士兵开枪案例

一个对象的属性可以是另一个类创建的对象

士兵开枪案例

class Gun:
def __init__(self, model):
self.model = model
self.bullet_count = 0 def add_bullet(self, count):
self.bullet_count += count def shoot(self):
# 1.判断子弹数量
if self.bullet_count <= 0:
print("%s 没有子弹了,请进行填充" % self.model)
return
# 2.发射子弹
self.bullet_count -= 1
# 3.提示子弹发射
print("[%s]突突突。。。[%d]" % (self.model, self.bullet_count)) class Solider:
def __init__(self, name):
# 士兵姓名
self.name = name
# 枪,新兵没有枪
self.gun = None def fire(self):
# 1.判断有没有枪
if self.gun is None:
print("%s 还没有枪。。。" % self.name)
return
# 2.喊口令
print("%s 冲鸭。。。" % self.name)
# 3.装填子弹
self.gun.add_bullet(50)
# 4.让枪发射子弹
self.gun.shoot()
pass # 创建枪对象
ak47 = Gun("AK47") # 创建士兵
xusanduo = Solider("许三多")
xusanduo.gun = ak47
xusanduo.fire()

Python面向对象之面向对象封装案例的更多相关文章

  1. python面向对象封装案例(附:is和==的区别)

    面向对象封装案例 目标 封装 小明爱跑步 存放家具 01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对 ...

  2. python-面向对象-04_面向对象封装案例

    面向对象封装案例 目标 封装 小明爱跑步 存放家具 01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对 ...

  3. python-面向对象-05_面向对象封装案例 II

    面向对象封装案例 II 目标 士兵突击案例 身份运算符 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象, ...

  4. Python全栈--9 __import__ 反射和面向对象基础 self 封装 继承(多继承的顺序) 多态

    一.反射 python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员.获取成员.设置成员.删 ...

  5. python学习day19 面向对象(一)封装/多态/继承

    面向对象 封装思想:将同一类的函数函数封装到同一个py文件中,方便调用 面向对象也有封装的作用,将同一类的函数封装到一个类中 多态(鸭子模型):多种类型/多种形态 #,什么事鸭子模型 对于一个函数,p ...

  6. python 面向对象三大特性(封装 多态 继承)

    今天我们来学习一种新的编程方式:面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)注:Java和C#来说只支持面向对象编程,而python比较灵活即支持面 ...

  7. python进阶01 面向对象、类、实例、属性封装、实例方法

    python进阶01 面向对象.类.实例.属性封装.实例方法 一.面向对象 1.什么是对象 #一切皆对象,可以简单地将“对象”理解为“某个东西” #“对象”之所以称之为对象,是因为它具有属于它自己的“ ...

  8. Python面向对象三要素-封装(Encapsulation)

    Python面向对象三要素-封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.封装概述 将数据和操作组织到类中,即属性和方法 将数据隐藏起来,给 ...

  9. Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)

    Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 ​ 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以 ...

随机推荐

  1. D1 模拟赛

    T1 note 数组开小 菜的真实 60分 题目大意: 一个字符串 分成若干段 使每段内都没有重复的字符 求最少的段数 思路: 可以贪心 #include<iostream> #inclu ...

  2. zoj 3023 Light Bulb

    题目大意: 求L的最大值 思路: 可以想象出是一个关于人到灯泡距离x的单峰上凸函数 当光线在墙角左边的时候影子在不断增长 然后通过相似可以推出人在墙上影子的长度为:H+D*(h-H)/x 再加上地上的 ...

  3. wrap(),wrapAll(),wrapInner()的区别

    wrap从字面上理解就是包裹的意思,这三个函数也都是起到将内部节点进行包裹的作用,但是他们的各自的功能有又大不相同. 1.  a.wrap(b) 这个函数的作用是用b将a进行包裹,其中a所选中的可以为 ...

  4. java笔记线程方式2

    方式2:实现Runnable接口 * 步骤: *   A:自定义类MyRunnable实现Runnable接口 *   B:重写run()方法 *   C:创建MyRunnable类的对象 *   D ...

  5. P3207 [HNOI2010]物品调度

    传送门 完了题目看错了--还以为所有的\(x,y\)都要一样--结果题解都没看懂-- 先考虑如果已经求出了所有的\(pos\)要怎么办,那么我们可以把\(0\)也看做是一个箱子,然后最后每个箱子都在一 ...

  6. java 序列化和反序列化数据

    使用ObjectOutputStream 序列号原始数据和对象数据,使用ObjectInputStream 反序列化 使用字节存储数据,可以将序列化的数据存储到硬盘上,或输出到网络上 package ...

  7. 使用Oracle的DBMS_SQL包执行动态SQL语句

    引用自:http://blog.csdn.net/ggjjzhzz/archive/2005/10/17/507880.aspx 在某些场合下,存储过程或触发器里的SQL语句需要动态生成.Oracle ...

  8. oracle 自定义类型 type / create type

    一:Oracle中的类型有很多种,主要可以分为以下几类: 1.字符串类型.如:char.nchar.varchar2.nvarchar2. 2.数值类型.如:int.number(p,s).integ ...

  9. centos 7 中防火墙的关闭问题

    新安装的centos 7 发现有些程序端口是关闭的,想到了防火墙和selinux  selinx 好关闭 /etc/sysconfig/selinux 中 追加 SELINUX=disabled 防火 ...

  10. 微信JSSDK支付

    var appId,timeStamp,nonceStr,package,signType,paySign; function goumai(){ $.confirm({ title: '确认购买', ...