DAY 6 面向對象

http://www.cnblogs.com/wupeiqi/p/4493506.html
面向對象的三大特性是指:封裝、繼承和多態。

一、封裝

封裝,顧名思義就是將內容封裝到某個地方,以後再去調用被封裝在某處的內容。

所以,在使用面向對象的封裝特性時,需要:

將內容封裝到某處
從某處調用被封裝的內容
第一步:將內容封裝到某處

self 是一個形式參數,當執行 obj1 = Foo('wupeiqi', 18 ) 時,self 等於 obj1

                          當執行 obj2 = Foo('alex', 78 ) 時,self 等於 obj2

所以,內容其實被封裝到了對象 obj1 和 obj2 中,每個對象中都有 name 和 age 屬性,在內存裏類似於下圖來保存。

第二步:從某處調用被封裝的內容

調用被封裝的內容時,有兩種情況:

通過對象直接調用
通過self間接調用
1、通過對象直接調用被封裝的內容

上圖展示了對象 obj1 和 obj2 在內存中保存的方式,根據保存格式可以如此調用被封裝的內容:對象.屬性名

print(obj1.name)
2、通過self間接調用被封裝的內容

執行類中的方法時,需要通過self間接調用被封裝的內容
def obj.getname():
print(obj1.name)

綜上所述,對於面向對象的封裝來說,其實就是使用構造方法將內容封裝到 對象 中,然後通過對象直接或者self間接獲取被封裝的內容。

練習二:遊戲人生程序

1、創建三個遊戲人物,分別是:

蒼井井,女,18,初始戰鬥力1000
東尼木木,男,20,初始戰鬥力1800
波多多,女,19,初始戰鬥力2500
2、遊戲場景,分別:

草叢戰鬥,消耗200戰鬥力
自我修煉,增長100戰鬥力
多人遊戲,消耗500戰鬥力

class human():
    def __init__(self,name,sex,age,dmg):
        self.name = name
        self.sex = sex
        self.age = age
        self.dmg = dmg

    def battle1(self):
        self.dmg -= 200

    def selfbattle(self):
        self.dmg += 100
    def multi_battle(self):
        self.dmg -= 500
    def info(self):
        print("姓名:%s,性別:%s,當前戰鬥力:%d"%(self.name,self.sex,self.dmg))

h1 = human("東尼木木","男",20,1800)
h2 = human("蒼井井","女",18,1000)
h3 = human("波多多","女",19,2500)

h1.info()
h2.info()
h3.info()

h1.battle1()
h2.battle1()
h3.selfbattle()

h1.info()
h2.info()
h3.info()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章