py---------面向對象基礎篇
阿新 • • 發佈:2018-05-14
display 技術 cal -- splay 開發人員 實現 分享 local
一、引子
你現在是一家遊戲公司的開發人員,現在你需要開發一款叫做《人貓大戰》的小遊戲,你就思考呀,人貓大戰,那至少需要兩個角色,一個是人,一個是貓,且人和貓有不同的技能,比如人拿棍打狗,狗可以咬人,讓我們來描述這種不同角色和他們的功能?
首先定義初始技能,描述兩個角色
#人和狗初始角色1 def Person(name,sex,hp,dps): # 人模子 dic = {‘name‘:name,‘sex‘:sex,‘hp‘:hp,‘dps‘:dps,‘bag‘:[]} return dic def Dog(name,kind,hp,dps): # 狗模子 dic = {‘人和狗初始角色1name‘:name,‘kind‘:kind,‘hp‘:hp,‘dps‘:dps} return dic
定義了兩個模子,遊戲裏的每個人和每只貓擁有相同屬性。具體傳入一個人和一只貓。
#生一個人和一條狗具體參數 alex = Person(‘alex‘,‘不詳‘,250,5) #一個人alex ha2 = Dog(‘小黑‘,‘藏獒‘,15000,200) #一只貓 小花生成人和貓具體信
兩個角色對象生成了,狗和人的功能不同,打狗,狗咬人,這時候每一個功能寫一個函數,用哪個功能那個就調用哪個。
#######人打狗 def attack(person,dog): dog[attact 和 bite‘hp‘] -= person[‘dps‘] print(‘%s打了%s,%s掉了%s點血,剩余%s點血‘%(person[‘name‘],dog[‘name‘],dog[‘name‘],person[‘dps‘],dog[‘hp‘])) attack(alex,ha2) print(ha2) #原來血量減少了 ####狗咬人 def bite(dog,person): person[‘hp‘] -= dog[‘dps‘] print(‘%s咬了%s,%s掉了%s點血,剩余%s點血‘%(dog[‘name‘],person[‘name‘],person[‘name‘],dog[‘dps‘],person[‘hp‘])) bite(ha2,alex) #結果: 小黑咬了alex,alex掉了200點血,剩余50點血 print(alex) #結果: {‘name‘: ‘alex‘, ‘sex‘: ‘不詳‘, ‘hp‘: 50, ‘dps‘: 5, ‘bag‘: []}
上面的功能實現的簡直是完美!
但是仔細玩耍一會,你就不小心幹了下面這件事
bite(alex,ha2) #讓alex咬了小黑,哈哈哈
事實 上,從你寫的代碼上來看,這並沒出錯。很顯然,人是不能調用狗的功能的,但在你的程序例沒有做限制,如何在代碼級別實現這個限制呢?
def Person(name,sex,hp,dps): # 人模子 dic = {‘name‘:name,‘sex‘:sex,‘hp‘:hp,‘dps‘:dps,‘bag‘:[]} def attack(dog): dog[‘hp‘] -= dic[‘dps‘] print(‘%s打了%s,%s掉了%s點血,剩余%s點血‘ % (dic[‘name‘], dog[‘name‘], dog[‘name‘], dic[‘dps‘], dog[‘hp‘])) dic[‘attack‘] = attack return dic def Dog(name,kind,hp,dps): # 狗模子 dic = {‘name‘:name,‘kind‘:kind,‘hp‘:hp,‘dps‘:dps} def bite(person): person[‘hp‘] -= dic[‘dps‘] print(‘%s咬了%s,%s掉了%s點血,剩余%s點血‘ % (dic[‘name‘], person[‘name‘], person[‘name‘], dic[‘dps‘], person[‘hp‘])) dic[‘bite‘] = bite return dic alex = Person(‘alex‘,‘不詳‘,250,5) ha2 = Dog(‘哈士奇‘,‘藏獒‘,15000,200) # 人打狗 print(ha2) #打狗錢‘hp‘: 15000 print(alex[‘attack‘]) #屬於Person.<locals>局部組的函數 alex[‘attack‘](ha2) #alex 打狗 print(ha2) #打狗後‘hp‘: 14995 #alex[‘bite‘](ha2) #alex 咬狗這會就報錯啦限制alex咬狗的全新代碼
py---------面向對象基礎篇