面向对象---封装

本文通过实例详细介绍了面向对象编程中的封装概念,包括如何将属性和方法封装到类中,以及如何通过对象来调用这些属性和方法。并通过具体案例如家具摆放、士兵开枪等演示了封装的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

封装

1.封装是面向对象编程的一大特点

2.面向对象编程的第一步 将属性和方法封装到一个抽象的类中

3.外界使用类创建对象,然后让对象调用属性和方法

4.对象方法的细节都被封装在类的内部

下面通过几个实例让我们对封装有更深切的认识。

 

实例演练1:

XX爱跑步

1.XX体重75.0公斤

2.XX每次跑步会减肥0.5公斤

3.XX每次吃东西体重会增加1公斤

"""

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

lily = Person('lily',75.0)

lily.run()

#lily.eat()

print lily

amy = Person('amy',45.0)

amy.eat()

#amy.run()

print amy

print lily

实例演练2:

摆放家具

需求:

1.房子有户型,总面积和家具名称列表

新房子没有任何的家具

2.家具有名字和战地面积,其中

床:占4平米

衣柜:占2平面

餐桌:占1.5平米

3.将以上三件家具添加到房子中

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

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('bed',4)

print bed

chest = HouseItem('chest',2)

print chest

table = HouseItem('table',1.5)

print table

class House():

    def __init__(self,house_type,area):

        self.house_type = house_type

        self.area = area

        #剩余面积

        self.free_area = area

        # 家具名称列表

        self.item_list = []

    def __str__(self):

        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

# 创建房子对象

my_home = House('两室一厅',100)

# 添加家具

my_home.add_item(bed)

my_home.add_item(chest)

my_home.add_item(table)

print my_home

我们会发现这样的还是存在问题的,例如添加家具时房子面积过小怎么办,怎么将已添加家具放到列表中,怎样计算剩余面积?

在完成添加家具的方法之前,我们先简单回顾一下之前的代码

小结:

1.创建了一个家具类,使用到__init___和__str__两个内置的方法

2.准备了一个add_item方法 准备添加家具

3.使用 房子类 创建了一个 房子对象

4.让 房子对象 调用三次add_item方法,将三件家具以实参的形式传递到add_item内部

这是一个更具体的家具加到房子里的代码:

实例演练3:

摆放家具升级

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.item_list = []

    def __str__(self):

        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

        # 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

# 1.创建家具

bed = HouseItem('bed',4)

print bed

chest = HouseItem('chest',2)

print chest

table = HouseItem('table',7)

print table

#2.创建房子对象

my_home = House('两室一厅',60)

my_home.add_item(bed)

my_home.add_item(chest)

my_home.add_item(table)

print my_home

实例演练4:士兵开枪问题

file: 士兵开枪.py

date: 2018-07-17 2:08 PM

author: westos-dd

desc:

1.士兵瑞恩有一把AK47

2.士兵可以开火(士兵开火扣动的是扳机)

3.枪 能够 发射子弹(把子弹发射出去)

4.枪 能够 装填子弹 --增加子弹的数量

Soldier               Gun

-------------         -----------------

name                  model

gun                   bullet_count #子弹数量足够多才能完成射击的动作

-------------         -----------------

__init__(self):   __init__(self):

fire(self):          add_bullet(self,count):#装填子弹的方法

         shoot(self):

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

    def __init__(self,name):

        self.name = name

        self.gun = None

    def fire(self):

        # 1.判断士兵有没有枪

        if self.gun == None:

            print '%s 还没有枪。。' %self.name

            return

        # 2.高喊口号

        print 'go!!! %s' %self.name

        # 3.让枪装填子弹

        self.gun.add_bullet(50)

        # 4.让枪发射子弹

        self.gun.shoot()

# 1.创建枪对象

ak47 = Gun('AK47')

#ak47.add_bullet(50)

#ak47.shoot()

# 创建士兵

ryan = Soldier('Ryan')

ryan.gun = ak47

ryan.fire()

print ryan.gun

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

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值