楔子

你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能,比如人拿棍打狗, 狗可以咬人,怎么描述这种不同的角色和他们的功能呢?
你搜罗了自己掌握的所有技能,写出了下面的代码来描述这两个角色
def person(name,age,sex,job):
    data = {
        'name':name,
        'age':age,
        'sex':sex,
        'job':job
    }
 
    return data
 
def dog(name,dog_type):
    data = {
        'name':name,
        'type':dog_type
    }
    return data

上面两个方法相当于造了两个模子,游戏里的每个人和每条狗都拥有相同里的属性。游戏开始,你根据一个人或一只狗传入的具体信息来塑造一个具体的人或者狗,怎么生成呢?

d1 = dog("李磊","京巴")
p1 = person("严帅",36,"F","运维")
p2 = person("egon",27,"F","Teacher")

两个角色对象生成了,狗和人还有不同的功能呀,狗会咬人,人会打狗,对不对? 怎么实现呢,。。想到了, 可以每个功能再写一个函数,想执行哪个功能,直接 调用 就可以了,对不?

def bark(d):
    print("dog %s:wang.wang..wang..."%d['name'])
 
 
def walk(p):
    print("person %s is walking..." %p['name'])<br><br>
walk(p1) 
bark(d1)

上面的功能实现的简直是完美!

但是仔细玩耍一会,你就不小心干了下面这件事

p1 = person("严帅",36,"F","运维")
bark(p1) #把人的对象传给了狗的方法

事实 上,从你写的代码上来看,这并没出错。很显然,人是不能调用狗的功能的,但在你的程序例没有做限制,如何在代码级别实现这个限制呢?

def person(name,age,sex,job):
    def walk(p):
        print("person %s is walking..." % p['name'])
 
    data = {
        'name':name,
        'age':age,
        'sex':sex,
        'job':job,
        'walk':walk
    }
 
    return data
 
def dog(name,dog_type):
 
 
    def bark(d):
        print("dog %s:wang.wang..wang..."%d['name'])
    data = {
        'name':name,
        'type':dog_type,
        'bark':bark
    }
 
    return data
限制功能全新代码
d1 = dog("李磊","京巴")
p1 = person("严帅",36,"F","运维")
p2 = person("egon",27,"F","Teacher")
生产具体的人和汪

相关文章:

  • 2021-12-08
  • 2022-12-23
猜你喜欢
  • 2022-01-01
  • 2021-04-02
  • 2021-06-11
  • 2021-09-05
相关资源
相似解决方案