python学习笔记 day22 面向对象(一)

python学习笔记 day22 面向对象(一)1.人狗大战一个简单的小例子,定义一个Person(类)里面有人的很多属性,比如名字,性别,血量。攻击力,然后定义一个Dog(类),里面设置狗的很多属性,名字,血量,攻击力,种类等,然后又定义了两

大家好,又见面了,我是你们的朋友全栈君。

 1. 人狗大战

一个简单的小例子,定义一个Person(类)里面有人的很多属性,比如名字,性别,血量。攻击力,然后定义一个Dog(类),里面设置狗的很多属性,名字,血量,攻击力,种类等,然后又定义了两个函数attack 人打狗,以及bite()狗打人的函数,然后就可以操作这些函数,让人狗大战啦:

def Person(name,aggr,blood,sex):
    person={
        'name':name,
        'aggr':aggr,
        'blood':blood,
        'sex':sex
    }
    return person

def attack(person,dog):
    dog['blood']-=person['aggr']
    print("%s 被打了,掉了%s 的血"%(dog['name'],person['aggr']))

def Dog(name,aggr,blood,kind):
    dog={
        'name':name,
        'aggr':aggr,
        'blood':blood,
        'kind':kind
    }
    return dog

def bite(dog,person):
    person['blood']-=dog['aggr']
    print("%s 被咬了,掉了%s 的血"%(person['name'],dog['aggr']))
xuanxuan=Person('alex',2,100,'')
lucky=Dog('lucky',2,200,'泰迪')

attack(xuanxuan,lucky)
bite(lucky,xuanxuan)

 

运行结果:
<span role="heading" aria-level="2">python学习笔记 day22 面向对象(一)

 

但是有一点问题就是attack()也可以传参数,让狗“打”人(虽然我们知道这样是不合理的,所以才是有问题):

比如 bite(xuanxuan,lucky)的意义就变成了,xuanxuan咬lucky 这显然是不合理的~

所以可以考虑把bite()这个跟狗有关的 放在Dog()函数里面,限制只能由lucky这个已经实例化Dog()类的狗来调用,接下来给bite()函数传一个对象就可以啦~

def Person(name,aggr,blood,sex):
    person={
        'name':name,
        'aggr':aggr,
        'blood':blood,
        'sex':sex
    }
    def attack(dog):  # 这就形成了一个闭包,就是在内部函数中使用了外部函数内的变量名
        dog['blood'] -= person['aggr']
        print("%s 被打了,掉了%s 的血" % (dog['name'], person['aggr']))
    person['attack']=attack
    return person



def Dog(name,aggr,blood,kind):
    dog={
        'name':name,
        'aggr':aggr,
        'blood':blood,
        'kind':kind
    }
    def bite(person):
        person['blood'] -= dog['aggr']
        print("%s 被咬了,掉了%s 的血" % (person['name'], dog['aggr']))
    dog['bite']=bite
    return dog


xuanxuan=Person('alex',2,100,'')
lucky=Dog('lucky',2,200,'泰迪')

xuanxuan['atack'](lucky)  # 首先xuanxuan是一个字典 然后里面有个key 是attack 对应的value值是attack()函数,限制在函数Person()函数内部,就可以不乱颠倒人狗打架操作
lucky['bite'](xuanxuan)   # lucky是一个上面定义的字典,然后有个key 是bite。对应的是函数bite()函数,外不知可以传一个person 限制狗咬人

 

运行结果:
<span role="heading" aria-level="2">python学习笔记 day22 面向对象(一)

 

lucky是调用的Dog()传进了一些参数,定义它为一条狗,然后由于Dog()函数在内部定义了一个函数(闭包)bite()函数(有个参数)让外部不能直接调用bite函数,只能通过县定义一个狗,然后通过这个狗[‘bite’]来调用bite()函数,这样我们bite()函数中穿的就是一个人,或另外一条狗,都是很合理的,就不会出现原来的bite()传两个参数,bite(xuanxuan,lucky)变成xuanxuan咬lucky了~

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/156144.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号