python开发面向对象基础:人狗大战学面向对象

一,通过函数写人狗大战这个故事

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3
 4 #1.函数  人模子
 5 def person(name,level,life_value):
 6     p_dic = {
 7         ‘name‘:name,
 8         ‘level‘:level,
 9         ‘life_value‘:life_value
10     }
11     return p_dic
12 joker = person(‘joker‘,100,4000)
13
14 #函数  狗模子
15 def dog(name,breed,live_value):
16     d_dic = {
17         ‘name‘: name,
18         ‘breed‘: breed,  #(品种)
19         ‘live_value‘: live_value
20     }
21     return d_dic
22 dahei = dog(‘dahei‘,‘狼‘,10000)
23
24 #函数  定义人的攻击
25 def attack(person):   #定义人攻击
26     print(‘%s在攻击‘%person[‘name‘])
27 attack(joker)      #将Joker的返回值的字典传入,获取字典相应的值
28
29 #函数  定义狗的攻击
30 def bite(dog):      #定义狗攻击
31     print(‘%s在咬‘%dog[‘name‘])
32 bite(dahei)        #将dahei的返回值的字典传入,获取字典相应的值
33
34 #上面的调用很完美但是如果出现下面的情况的话,你会分不清楚谁攻击,谁咬死
35 attack(dahei)   #这个攻击是人的属性,狗也可以了
36 bite(joker)     #这个攻击时狗的属性,人也可以了

二,嵌套函数去写

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3
 4 def person(name,level,life_value):
 5     def attack():                             #把这个攻击定义在人里面
 6         print(‘%s在攻击‘ %p_dic[‘name‘])
 7     p_dic = {
 8         ‘name‘:name,
 9         ‘level‘:level,
10         ‘life_value‘:life_value,
11         ‘attack‘:attack
12     }
13     return p_dic
14
15 def dog(name,breed,live_value):
16     def bite():                               #把这个攻击定义在狗里面
17         print(‘%s在咬‘ % d_dic[‘name‘])
18     d_dic = {
19         ‘name‘:name,
20         ‘breed‘:breed,
21         ‘live_value‘:live_value,
22         ‘bite‘:bite
23     }
24     return d_dic
25
26 joker = person(‘joker‘,100,4000)
27 dahei = dog(‘dahei‘,‘狼‘,10000)
28 joker[‘attack‘]()        #这样调用的话就没有问题了,字典方式调用
29 dahei[‘bite‘]()
30
31 #上面的函数嵌套很完美但是如果我想现在定义个吃,玩的属性,难道你要在每个嵌套函数里面加字典的kev么
32 # 注意:实现吃,玩的属性,不能在外面单独写吃的函数,因为不能确定谁去吃,写在里面又会出现代码重复的情况

三,面向对象的定义

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3
 4 class Person:
 5     role = ‘中国人‘    #属性—— 静态属性--类属性  例子中用不到
 6     def __init__(self,name):  #传参
 7         print(‘there here‘)
 8         print(name)
 9     def attack(self):  #方法——动态属性
10         print(‘攻击‘)
11 # print(Person.role)   #类名.属性
12 # print(Person.attack) #类名.方法  打印出来的是内存地址
13 # joker = Person()  #调用,首先执行init方法(构造函数) self就是joker
14 # joker = Person(‘joker‘)   #有参数,init也是相对应得需要参数

3.1 上面代码解释成函数为

 1 #!/usr/bin/env python
 2 #_*_coding;utf-8_*_
 3
 4 def Person(*args,**kwargs):
 5     self = {}
 6     def __init__(name,life_value,aggr):
 7         self[‘name‘] = name
 8         self[‘life_value‘] = life_value
 9         self[‘aggr‘] = aggr
10         return self
11     self_ret =  __init__(*args,**kwargs)
12     return self_ret
13 # joker =Person(‘joker‘,1000,500)

3.2 人人大战

 1 #!/usr/bin/env python
 2 #_*_coding;utf-8_*_
 3
 4 class Person:
 5     role = ‘中国人‘    #属性—— 静态属性
 6     def __init__(self,name,life_value,aggr):
 7         self.name = name
 8         self.life_value = life_value
 9         self.aggr = aggr
10     def attack(self,enemy):  #方法——动态属性,enemy对象,攻击谁
11         enemy.life_value = enemy.life_value - self.aggr
12 # egon = Person(‘egon‘,1000,50)
13 # alex = Person(‘alex‘,250,5)
14 # print(alex.life_value)
15 # egon.attack(alex)
16 # egon.attack(alex)        #egon攻击alex,alex血会减少,相当于改了实例里面的value
17 # print(alex.life_value)
18 # alex.attack(egon)        #alex攻击egon,egon血量会减少

四,面向对象人狗大战

 1 #!/usr/bin/env python
 2 #_*_coding;utf-8_*_
 3
 4 class Person:
 5     role = ‘中国人‘    #属性—— 静态属性
 6     def __init__(self,name,life_value,aggr):
 7         self.name = name
 8         self.life_value = life_value
 9         self.aggr = aggr
10     def attack(self,dog):  #方法——动态属性,enemy对象,攻击谁
11         dog.life_value = dog.life_value - self.aggr
12
13 class Dog:
14     def __init__(self,name,breed,aggr,life_value):
15         self.nickname = name
16         self.breed = breed
17         self.aggr = aggr
18         self.life_value = life_value
19     def bite(self,person):
20         person.life_value = person.life_value - self.aggr
21
22 alex = Person(‘alex‘,250,500)
23 egon = Person(‘egon‘,22,10)
24 dahei = Dog(‘dahei‘,‘狼‘,30,2000)
25
26 print(dahei.life_value)   #alex攻击dog,要打印狗的血
27 alex.attack(dahei)
28 print(dahei.life_value)
29
30 print(alex.life_value)    #dog攻击alex,要打印alex的血
31 dahei.bite(alex)
32 print(alex.life_value)
33
34 print(dahei.life_value)   #egon攻击dog,要打印狗的血
35 egon.attack(dahei)
36 print(dahei.life_value)
时间: 2024-10-19 21:50:07

python开发面向对象基础:人狗大战学面向对象的相关文章

python开发之旅——面向对象【人狗大战】

class Dog: role = 'Dog' def __init__(self,name,breed,attack_val): self.name = name self.breed = breed self.attack_val = attack_val self.life_val = 100 def bite(self,person): person.life_val -= self.attack_val print('狗%s咬人%s 人掉了%s血,还剩%s血'%(self.name,p

【Java面向对象基础(三)】面向对象思想

[喵"的Android之路][基础篇(三)][Java面向对象基础]面向对象思想 1 面向对象的WWH 1.1 What--什么是面向对象 首先,要理解“对象”.在Thinking in Java中提到“Everything is an object”,即万物皆对象.这里的“对象”指的是任何实体或者任何可以当作实体看待的“虚幻的事物”.比如现实中的人(男人.女人.老人.小孩而...).动物(大象.狮子.猴子...).桌子.凳子.汽车.ATM机等等,也可以使看不见摸不着的空气(氧气.二氧化碳.氮气

Python开发【第七篇】:面向对象

Python之路[第五篇]:面向对象及相关 面向对象基础 基础内容介绍详见一下两篇博文: 面向对象初级篇 面向对象进阶篇 其他相关 一.isinstance(obj, cls) 检查是否obj是否是类 cls 的对象 ? 1 2 3 4 5 6 class Foo(object):     pass obj = Foo() isinstance(obj, Foo) 二.issubclass(sub, super) 检查sub类是否是 super 类的派生类 ? 1 2 3 4 5 6 7 cla

面向对象方法实战 -人狗大战

class Animal: #定义一个动物类 def __init__(self,name,hp,attack): self.name =name self.hp =hp self.attack =attack class Person(Animal): #继承动物类 def dg(self,dog): #创建人打狗的方法 dog.hp-=self.attack class Dog(Animal): #继承动物类 def yr(self,peole): #创建狗咬人的方法 peole.hp-=s

python开发模块基础:序列化模块json,pickle,shelve

一,为什么要序列化 # 将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化'''比如,我们在python代码中计算的一个数据需要给另外一段程序使用,那我们怎么给?现在我们能想到的方法就是存在文件里,然后另一个python程序再从文件里读出来.但是我们都知道,对于文件来说是没有字典这个概念的,所以我们只能将数据转换成字典放到文件中.你一定会问,将字典转换成一个字符串很简单,就是str(dic)就可以办到了,为什么我们还要学习序列化模块呢?没错序列化的过程就是从dic 变成str(dic)的

python开发模块基础:collections模块

一,collections模块 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.defaultdict.namedtuple和OrderedDict等.1.namedtuple: 生成可以使用名字来访问元素内容的tuple2.deque: 双端队列,可以快速的从另外一侧追加和推出对象3.Counter: 计数器,主要用来计数4.OrderedDict: 有序字典5.defaultdict: 带有默

Python开发(基础):初识Python

Python可以应用于众多领域,如:数据分析.组件集成.网络服务.图像处理.数值计算和科学计算等众多领域.目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube.Dropbox.BT.Quora(中国知乎).豆瓣.知乎.Google.Yahoo!.Facebook.NASA.百度.腾讯.汽车之家.美团等.互联网公司广泛使用Python来做的事一般有:自动化运维.自动化测试.大数据分析.爬虫.Web 等. 注视:上述重点字体表示该公司主要使用Python语言开发 Python的种

082 实例 人狗大战

定义一个狗类 class Dog: type_dog = '藏獒' # 对象生成的属性-->通过__init__方法 def __init__(self,name,aggressivity,hp=100): self.name = name self.aggressivity = aggressivity self.hp = hp # 定义对象相同的方法 def bite(self,target): # target.hp-->人的血量 # self.aggressivity->当前狗的

python开发模块基础:os&sys

一,os模块 os模块是与操作系统交互的一个接口 1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 4 ''' 5 os.walk() 显示目录下所有文件和子目录以元祖的形式返回,第一个是目录,第二个是文件夹,第三个是文件 6 open(r'tmp\inner\file',w) 创建文件 7 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 可以先记录当前文件目录 8 os.chdir("dirname") 改