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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章