小猿圈python学习-面向对象来了

引子
你现在是一家游戏公司的开发人员,现在需要你开发一款叫做的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗 , 且人和狗都有不同的技能 , 比如人拿棍打狗 ,  狗可以咬人,怎么描述这种不同的角色和他们的功能呢?
列下具体需求:
1.人狗大战,生成多条狗,多个人
2.狗能咬人,人能打狗
3.咬了或被打了都掉血
你搜罗了自己掌握的所有技能 , 写出了下面的代码来描述这两个角色
= {
“京巴”:20,
“藏獒”:80,
“平头哥”:60
def dog(name,):
ifin :
d = {
“name”:name,
“type”:,
“” :100
else:
print(“未知物种,不易接近”)
None
d
def (name,age,sex):
d = {
“name”: name,
“age”: age,
“sex”:sex,
“”: 100
if age > 18:
d[“”] = 50
else:
d[“”] = 30
d

小猿圈python学习-面向对象来了

文章插图
上面两个方法相当于造了两个模子 , 游戏开始,你得生成一个人和狗的实际对象吧,怎么生成呢?
dog1 = dog(“majj”,“平头哥”)
dog2 = dog(“二哈”,“京巴”)
p1 = (“alex”,22,“male”)
两个角色对象生成了,狗和人还有不同的功能呀,狗会咬人,人会打狗 , 对不对? 怎么实现呢 ,  。。想到了 ,  可以每个功能再写一个函数,想执行哪个功能,直接 调用 就可以了,对不?
def bite(,):
[“”] -= [[“type”]]
print(“疯狗[%s]咬了[%s],掉血[%s]…” %([“name”], [‘name’], [[“type”]]) )
def beat(,):
[“”] -= [‘’]
print("[%s] 打了 疯狗[%s],狗掉血[%s]…" %([“name”], [“name”], [“”]))
dog1 = dog(“majj”,“平头哥”)
dog2 = dog(“二哈”,“京巴”)
p1 = (“alex”,22,“male”)
bite(dog1,p1) #调用
beat(p1,dog2)
print(dog1,dog2)
上面的功能实现的简直是完美!
但是仔细玩耍一会,你就不小心干了下面这件事
人是不应该调用狗的功能的,如何在代码级别实现这个限制呢?
= {
“京巴”:20,
“藏獒”:80,
“平头哥”:60
def dog(name,):
ifin :
d = {
“name”:name,
“type”:,
“” :100
else:
print(“未知物种,不易接近”)
None
def bite(): # 把这个方法写在dog里面,表示这是dog独有的功能
[“”] -= [d[“type”]]
print(“疯狗[%s]咬了[%s],掉血[%s]…” % (d[“name”], [‘name’], [d[“type”]]))
d[“bite”] = bite
d
def (name,age,sex):
d = {
“name”: name,
“age”: age,
“sex”:sex,
“”: 100
if age > 18:
d[“”] = 50
else:
d[“”] = 30
def beat( ): # 把这个方法写在里面,表示这是独有的功能
[“”] -= d[‘’]
print("[%s] 打了 疯狗[%s],狗掉血[%s]…" % (d[“name”], [“name”], d[“”]))
d[“beat”] = beat
d
dog1 = dog(“majj”,“平头哥”)
dog2 = dog(“二哈”,“京巴”)
p1 = (“alex”,22,“male”)
dog1"bite" # 调用时只传递要咬谁就行了
p1"beat"
print(dog1,dog2)
【小猿圈python学习-面向对象来了】你是如此的机智,这样就实现了限制人只能用人自己的功能啦 。
说了这么多,这跟面向对象有什么关系么? 当然有,其实你上面写的代码,就是面向对象的代码 。
你在设计角色时,为了让一个角色可以变成多个实体对象 , 你设计了一个基础模板,只要传入不同参数,就会产生不同的狗 。这代表你已经开始切换成上帝视角看事情 ,上帝视角就是面向对象编程的视角,上帝要造世界万物 , 他肯定不是一个一个的造出来,他肯定是设计出一个个的物种的模板 , 然后通过模子批量批一个个的实体造出来 。造出来的实体各有特色,属性、功能都不尽相同,有的人的贪婪、有的人好色、有的人懦弱,有的人勇猛 。这些人之间会发生什么关系,谁和谁交媾、谁和谁打仗,上帝懒的管,上帝只控制大局 。听着玄乎吧,我们接下来一点点接晓怎么通过面向对象在编程世界里做上帝 。