面向对象详解以及封装案例解答

1、面向对象和面向过程
    面向过程:核心过程二字,过程即解决问题的步骤,就是先干什么后干什么
    基于该思想写程序就好比在这是一条流水线,是一种机械式的思维方式
    优点:复杂的过程流程化
    缺点:扩展性差

    面向对象:核心是对象二字,对象指特征与技能的结合体
    基于该思想编写程序就好比在创造一个世界,世界是由一个个对象组成,是一种‘上帝式’的思维方式
    优点:可扩展性强
    缺点:变成复杂度高,极容易出现过度设计的问题


2、类
    对象是特征与技能的结合体,类就是一系列对象相似的特征与技能的结合体
    在现实生活中:一定是先有一个个具体的对象,后总结出类
    在程序中:一定是先定义类,后产生对象

 封装介绍:

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

封装案例一:小明

需求
#     1.小明体重75公斤
#     2.小明每次跑步都会减肥0.5公斤
#     3.小明每次吃东西体重会增加1公斤

# class Human:           
#     def __init__(self,name,weight):
#         self.name = name         #属性:名字和体重
#         self.weight = weight
#
#     def run(self):
#         self.weight -= 0.5       #每跑一次步就瘦0.5
#     def eat(self):
#         self.weight +=  1         #吃一次胖1
#     def __str__(self):
#         return '%s的体重为%s' %(self.name,self.weight)
# xm = Human('小明',75)   
# xm.eat()
# xm.run()
# print(Human)           ——》实例化什么就打印什么
#当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据

案列二:房子添加家具

#     1、房子有户型、总面积、家具名称列表
#       房子没有任何家具
#     2、家具有名字和占地面积,其中
#       席梦思(bed):4平米
#       衣柜(chest): 2平米
#       餐桌(table): 1.5平米
#     3、将以上3个家具添加到房子中
#     4、打印房子中,要求输出:户型、总面积、剩余面积、家具名称列表

class Items:
    def __init__(self,name,area):       
        self.name = name
        self.area = area

class House:
    def __init__(self,type,z):    #剩余面积self.f可以根据总面积-家具面积得到,所以不需要设置变量
        self.type = type
        self.z = z
        self.f  = z
        self.list = []           #家具列表为空
    def add(self,jj):
        self.list.append(jj.name)      #已经定义过家具的属性,可以直接用
        self.f -= jj.area
    def __str__(self):                 
        return '户型为%s,总面积为%s,剩余面积为%s,家具列表名称为%s' %(self.type,self.z,self.f,self.list)    #使用return
bed = Items('木板床',4)
chest = Items('衣柜',2)
table = Items('桌子',1.5)
h = House('地下室',20)            #以上四步都是实例化
h.add(bed)
h.add(chest)
print(h)                  #直接打印实例化目标

案例三:士兵突击

class Gun:                --->先定义枪类型
    def __init__(self,mode,count):    ---》属性为类型和子弹数量
        self.mode = mode
        self.count = 0              ---》初始子弹数量为0
    def shoot(self,number):         ----》枪的技能1发射,子弹剩余量=总弹数-发射的数量(不定)
        self.count -= number
    def add_count(self,number):     ----》枪的技能2装子弹,子弹剩余量= 装入与发射的差
        self.count += number
class Soldier:             ----》定义士兵类型
    def __init__(self,name):
        self.name = name         ---》属性1姓名
        gun = None               ----》属性2 枪
    def fire(self,count):
        count = n.count          ---》定义士兵的枪的子弹数量为上面枪剩余子弹数
        if count > 0:               ----》大于0允许开炮,否则不允许
            print('你持有ak47,子弹数量是%s,可以开炮' %count)
        else:
            print ('没有子弹了,不可以开炮')

n = Gun('ak47',0)            ----》定义枪类型的对象为n,n的名字是ak47
n.add_count(int(input('装入子弹数:')))       ----》自定义装入子弹数
n.shoot(int(input('射出子弹数:')))            ----》自定义射出子弹数
s = Soldier('许三多')                        ---》定义士兵类型为许三多
print(s.fire(n.count))          ----》根据士兵手里的ak是否有子弹来输出是否可以开炮
原文地址:https://www.cnblogs.com/zzzynx/p/10779036.html