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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Kettle工具使用及总结

    Kettle工具使用及总结Kettle工具使用及总结,kettle主要用于数据清洗,即常见ETL工具,拥有图形化界面且免费的优点。其下载包直接解压打开就能用,遇到的问题:1.连接MySQL报错:①报错:Driverclass’org.gjt.mm.mysql.Driver’couldnotbefound,makesurethe’MySQL’driver(jarfile)isinstalled.org.gjt.mm.mysql.Driver原因:没有识别

    2022年10月17日
    4
  • 【建议收藏】MySQL 三万字精华总结 —查询和事务(三)

    【建议收藏】MySQL 三万字精华总结 —查询和事务(三)

    2022年2月17日
    42
  • 金山词霸2009牛津版完整激活成功教程版+绿色精简版下载

    金山词霸2009牛津版完整激活成功教程版+绿色精简版下载山软件推出了最新的《金山词霸2009牛津版》了!这次金山词霸与牛津合作,一次性增加6本牛津词典,这在牛津在全球的翻译软件合作伙伴中也属首次,实属不容易呢,可以说提升了金山词霸在翻译软件类中的权威和经典的形象了。    这次《金山词霸2009牛津版》里面内置了6本牛津词典:《新牛津英汉双解大词典》、《新牛津美语大词典》、《牛津英语习语词典》、《牛津短语动词词典》、《牛津英语搭配词典》、《牛津英语同义

    2022年7月15日
    18
  • IDEA的优化配置

    IDEA的优化配置前言IDEA全称IntelliJIDEA,是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、创新的GUI设计等方面的功能可以说是超常的。idea的优化可以使我们更得心应手的高效开发设置优化方法分割线一个文件可能会有一个或多个方法,堆积在一起使人眼花缭乱。方法分割线可以是我们快速区分方法。File——Setting——Edi

    2022年5月21日
    50
  • 单片机八路抢答器计设计_基于单片机的三路抢答器设计

    单片机八路抢答器计设计_基于单片机的三路抢答器设计详细代码讨论加我QQ:1271370903一、设计任务与要求一、题目:8路比赛抢答器二、基本要求:利用8051单片机中断系统,制作一个有8个按键的比赛抢答器。在有人按键时进行对应选手显示。三、设计任务:1.设计硬件电路,画出电路原理图;2.画出程序流程图;3.编制程序,写出源程序代码;4.写出5000字的详细说明书,要求字迹工整,原理叙述正确,会计算主要元器件的一些参数,并选择元器件;5.个人总结。四、参考资料:1.教材;2.单片机实验指导书》**二、方案设计**方案:该系

    2022年10月20日
    5
  • centos系统大量time wait占用的解决

    centos系统大量time wait占用的解决统计在一台前端机上高峰时间TCP连接的情况,统计命令:netstat-n|awk’/^tcp/{++S[$NF]}END{for(ainS)printa,S[a]}’除了ESTABLISHED,可以看到连接数比较多的几个状态是:FIN_WAIT1,TIME_WAIT,CLOSE_WAIT,SYN_RECV和…

    2022年5月9日
    252

发表回复

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

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