鱼C论坛

 找回密码
 立即注册
查看: 855|回复: 7

拜托各位大佬帮忙看一下 为什么会出现错误

[复制链接]
发表于 2019-5-12 20:40:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 第一浩男 于 2019-5-12 21:09 编辑

一个简单的士兵开枪的程序,但是始终不知道为什会有这个错误!
错误码:
  1. 请装子弹:10
  2. 10发子弹已经上膛
  3. Traceback (most recent call last):
  4.   File "F:\Py\课堂练习.py", line 30, in <module>
  5.     xu.fire(ak47)
  6.   File "F:\Py\课堂练习.py", line 23, in fire
  7.     self.gun.get_fire()
  8. AttributeError: 'Person' object has no attribute 'gun'
  9. >>>
复制代码


程序码:
  1. class Gun:
  2.     def __init__(self,name):
  3.         self.name = name
  4.         
  5.     def get_count(self):
  6.         self.count = int(input('请装子弹:'))
  7.         print('%d发子弹已经上膛'%self.count)
  8.     def get_fire(self):
  9.         if self.count > 0:
  10.             self.count -= 1
  11.             print('还剩%d发子弹'%self.count)
  12.         else:
  13.             print('没有子弹了!')
  14.             return
  15.             
  16.       
  17. class Person:
  18.     def __init__(self,name):
  19.         self.name = name
  20.    
  21.     def fire(self,gun):
  22.         self.gun.get_fire()
  23.         
  24.         print('士兵%s开枪后还剩%d发子弹'%(self.name,self.gun.count))

  25. ak47 = Gun('AK47')
  26. ak47.get_count()
  27. xu = Person('小王')
  28. xu.fire(ak47)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-5-12 20:45:42 | 显示全部楼层
我想问的是两个不同的类,为啥方法可以共用?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-12 20:59:12 | 显示全部楼层
风丶少 发表于 2019-5-12 20:45
我想问的是两个不同的类,为啥方法可以共用?

能再具体一点吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-12 21:07:52 | 显示全部楼层
本帖最后由 第一浩男 于 2019-5-12 21:24 编辑

我觉得2楼说的好像不对,我应该是在第22句之前定义一个属性就好了,然后用这个类里的属性去调用那个类里的方法!不是共用一个方法吧!我这么说对吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-12 22:09:56 | 显示全部楼层
第一浩男 发表于 2019-5-12 21:07
我觉得2楼说的好像不对,我应该是在第22句之前定义一个属性就好了,然后用这个类里的属性去调用那个类里的 ...

self.gun.get_fire()
这句看不懂。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-12 22:22:08 | 显示全部楼层
第一浩男 发表于 2019-5-12 21:07
我觉得2楼说的好像不对,我应该是在第22句之前定义一个属性就好了,然后用这个类里的属性去调用那个类里的 ...

可能这是你想要的效果吧。。
  1. class Gun:
  2.     def __init__(self,name):
  3.         self.name = name
  4.         
  5.     def get_count(self):
  6.         self.count = int(input('请装子弹:'))
  7.         print('%d发子弹已经上膛'%self.count)
  8.         
  9.     def get_fire(self):
  10.         if self.count > 0:
  11.             self.count -= 1
  12.             return'还剩%d发子弹'%self.count
  13.         else:
  14.             return '没有子弹了!'
  15.             
  16.             
  17.       
  18. class Person:
  19.     def __init__(self,name):
  20.         self.name = name
  21.    
  22.     def fire(self,gun):
  23.         self.gun = gun.get_fire()
  24.         
  25.         print('士兵%s开枪后'%(self.name),(self.gun))

  26. ak47 = Gun('AK47')
  27. ak47.get_count()
  28. xu = Person('小王')
  29. xu.fire(ak47)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-12 23:10:28 | 显示全部楼层
本帖最后由 jackz007 于 2019-5-12 23:11 编辑

    感觉用类组合新建一个类 Soldier,似乎更加合理一些,下面是代码,供楼主测试:
  1. class Gun:
  2.     def __init__(self , name , count):
  3.         self . name  = name
  4.         self . count = count

  5.     def get_fire(self):
  6.         if self . count > 0:
  7.             print('-pong!-')
  8.             print('还剩 %d 发子弹' % (self . count - 1))
  9.             self . count -= 1
  10.         else:
  11.             print('没有子弹了!')

  12. class Person:
  13.     def __init__(self , name):
  14.         self . name = name

  15. class Soldier:
  16.     def __init__(self , name1 , name2 , count):
  17.         self . person = Person(name1)
  18.         self . gun = Gun(name2 , count)
  19.         
  20. soldier = Soldier('小王' , 'AK47' , 30)
  21. soldier . gun . get_fire()
  22. soldier . gun . get_fire()
  23. soldier . gun . get_fire()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-12 23:23:47 | 显示全部楼层
python 的类的方法默认都是公共的。其它的类或者函数都可以随便访问。
包括类的成员都是这样。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-15 18:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表