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()