面向对象(Python):学习笔记之封装
发布日期:2021-06-30 15:42:36 浏览次数:2 分类:技术文章

本文共 3967 字,大约阅读时间需要 13 分钟。

封装

  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 = name        self.weight = weight    def __str__(self):        return "我的名字叫%s,我的体重是:%.2f" % (self.name, self.weight)    def eat(self):        print("%s 吃了一顿饭" % self.name)        self.weight += 1    def 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 = name        self.weight = weight    def __str__(self):        return "我的名字叫%s,我的体重是:%.2f" % (self.name, self.weight)    def eat(self):        print("%s 吃了一顿饭" % self.name)        self.weight += 1    def 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 = name        self.area = area    def __str__(self):        return "%s的占地面积为%.2f" % (self.name, self.area)class House:    def __init__(self, layout, all_area):        self.layout = layout        self.all_area = all_area        self.remain_area = all_area        self.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)            return        else:            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 = 0    def add_bullet(self, count):        # 上弹        self.bullet_count += count    def 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初始化gun        self.gun is None        self.name = name    def 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 = ak47print(xsd.gun)xsd.fire()

执行结果:

在这里插入图片描述

转载地址:https://kaisarh.blog.csdn.net/article/details/103040509 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Python:字符串、列表、元组、字典之间的相互转换
下一篇:面向对象(Python):学习笔记之面向对象基础

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月15日 04时27分58秒