python封装案例_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("今天跑步了,又能瘦一点了")

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值