面向對象詳解以及封裝案例解答

一、面向對象和麪向過程
    面向過程:核心過程二字,過程即解決問題的步驟,就是先幹什麼後幹什麼
    基於該思想寫程序就比如在這是一條流水線,是一種機械式的思惟方式
    優勢:複雜的過程流程化
    缺點:擴展性差

    面向對象:核心是對象二字,對象指特徵與技能的結合體
    基於該思想編寫程序就比如在創造一個世界,世界是由一個個對象組成,是一種‘上帝式’的思惟方式
    優勢:可擴展性強
    缺點:變成複雜度高,極容易出現過分設計的問題


2、類
    對象是特徵與技能的結合體,類就是一系列對象類似的特徵與技能的結合體
    在現實生活中:必定是先有一個個具體的對象,後總結出類
    在程序中:必定是先定義類,後產生對象

 封裝介紹:編程

1.封裝是面相對性一大特色
2.面向對象編程的第一步--將屬性和方法封裝到一個抽象的類當中
3.外界使用類建立對象,而後讓對象調用方法
4.對象方法的細節都被封裝在類的內部

封裝案例一:小明app

需求
#     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的數據

案列二:房子添加傢俱spa

#     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是否有子彈來輸出是否能夠開炮
相關文章
相關標籤/搜索