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了~

 

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mac开发php集成环境「建议收藏」

    mac开发php集成环境「建议收藏」    我是一个使用mac开发的phper,虽然使用mac开发也就不到一年,但是mac上的一些技巧还是掌握的不错的,但实际开发中光有操作技巧是不行的,环境的效率也是很重要的,因为之前一直使用homestead 虚拟机,刚开始还没感觉它有多慢,但是后来感觉homestead真是太慢了,当然这可能也跟电脑的性能有关,我经常启动好几个虚拟机,在上面跑windows系统。…

    2022年6月28日
    35
  • C语言-链表排序_单链表的排序c语言

    C语言-链表排序_单链表的排序c语言C语言-链表排序题目描述已有a、b两个链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,按学号升序排列。输入第一行,a、b两个链表元素的数量N、M,用空格隔开。接下来N行是a的数据然后M行是b的数据每行数据由学号和成绩两部分组成输出按照学号升序排列的数据样例输入235100689382495210样例输出210382…

    2022年10月11日
    0
  • go 布隆过滤器_布隆过滤器 redis

    go 布隆过滤器_布隆过滤器 redis最近面临这样的场景:2亿+数据需要调用后端服务A,业务需要1min处理完成,那么A服务承载的tps达到惊人的300w……必须想办法降低tps。那么方案来了:1、把时间窗口拉长2、降低待处理数据量。拉长时间业务肯定是接受不了的,但是按照以往的经验,这部分数据并不全部需要处理,可能仅有一半真正需要调用A服务,所以我们可以把1亿数据给过滤掉。这里我们维护一个布隆过滤器来进行数据的过滤。—————-以上都是导语—————-1.布隆过滤器的概

    2022年10月6日
    0
  • Android studio中如何调用setpositivebutton函数[通俗易懂]

    Android studio中如何调用setpositivebutton函数[通俗易懂]

    2022年6月23日
    20
  • 内存或磁盘空间不足,excel无法再次打开_打开文件显示内存或磁盘空间不足

    内存或磁盘空间不足,excel无法再次打开_打开文件显示内存或磁盘空间不足在网络上下载的文件,使用EXCEL打开的时候提示“内存或磁盘空间不足,MicrosoftExcel无法再次打开或保存任何文档。”,针对这个问题,装机之家小编特地在网上搜罗了具体解决方法,但是网上提

    2022年8月4日
    5
  • python缩进错误提示(python缩进讲解)

    参考链接:Python语句,缩进和注释广告关闭腾讯云11.11云上盛惠,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!学习python与其他语言最大的区别就是,python的代码块不使用大括号{}来控制类,函数以及其他逻辑判断。python最具特色的就是用缩进来写模块。缩进…有时候,你觉得两行代码的缩进是一样的,但编译器仍然报错。这可能是因为一个地方使用空格来缩进,而另一个地方使用了tab键来缩进。碰到这种情况要统一…..

    2022年4月10日
    249

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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