鱼C论坛

 找回密码
 立即注册
查看: 1271|回复: 15

[已解决]请教 python 中关于类的问题 请见代码

[复制链接]
发表于 2018-5-2 23:49:01 | 显示全部楼层 |阅读模式

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

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

x
  1. class Turtle:
  2.     def __init__(self, x):
  3.         self.num = x

  4. class Fish:
  5.     def __init__(self, x):
  6.         self.num = x

  7. class Pool:
  8.     def __init__(self, x, y):
  9.         self.turtle = Turtle(x)
  10.         self.fish = Fish(y)

  11.     def print_num(self):
  12.         print('水池里一共有%d只乌龟,%d条小鱼' % (self.turtle.num, self.fish.num))
复制代码


我想知道,这里的 self.turtle.num 和 self.fish.num 中后面加的 num 是什么?这个 num 是python 中的内置函数么?还是怎么样的 我试着不加num 会报错的
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    p.print_num()
  File "C:\Users\lishaoye\Desktop\4-29-1.py", line 15, in print_num
    print('水池里一共有%d只乌龟,%d条小鱼' % (self.turtle, self.fish))
TypeError: %d format: a number is required, not Turtle

翻译了一下,类型错误:%d格式:一个数字是必需的,而不是乌龟
最佳答案
2018-5-3 00:25:49
代码没错:
print('水池里一共有%d只乌龟,%d条小鱼' % (self.turtle.number, self.fish.number)#漏了括号
self.turtle与self.fish是Turtle和Fish的对象。对象访问属性要通过 “.”来访问
故没加.num就会报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-5-2 23:53:47 | 显示全部楼层
百度查了
python里并没有num这个函数或者方法
那为什么 运行程序的时候加上 num 就不会出现异常,不加 .num  就会出现异常报错呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-2 23:59:53 | 显示全部楼层
  1. class Turtle:
  2.     def __init__(self, x):
  3.         self.number = x

  4. class Fish:
  5.     def __init__(self, x):
  6.         self.number = x

  7. class Pool:
  8.     def __init__(self, x, y):
  9.         self.turtle = Turtle(x)
  10.         self.fish = Fish(y)

  11.     def print_num(self):
  12.         print('水池里一共有%d只乌龟,%d条小鱼' % (self.turtle.number, self.fish.number)
复制代码


我试着把代码里面所有的 num 替换为  number 结果还是会抛出异常的
Traceback (most recent call last):
  File "<pyshell#13>", line 1, in <module>
    p.print_num()
  File "C:\Users\lishaoye\Desktop\4-29-1.py", line 15, in print_num
    print('水池里一共有%d只乌龟,%d条小鱼' % (self.turtle.number, self.fish.number))
AttributeError: 'Turtle' object has no attribute 'number

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-3 00:17:45 | 显示全部楼层
代码没错:
  1. print('水池里一共有%d只乌龟,%d条小鱼' % (self.turtle.number, self.fish.number))#漏了一个括号
复制代码


self.turtle与self.fish分别是Turtle和Fish的对象;对象访问属性要通过 “  .  ” 来访问,故没加.num它就会报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-3 00:20:41 | 显示全部楼层
代码没错:
print('水池里一共有%d只乌龟,%d条小鱼' % (self.turtle.number, self.fish.number))#漏了括号

self.turtle和self.fish分别是Turtle和Fish的对象;
对象访问属性通过 “ . ” 来访问;
故没加.num它就会报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-3 00:22:18 | 显示全部楼层
代码没错:
print('水池里一共有%d只乌龟,%d条小鱼' % (self.turtle.number, self.fish.number))#漏了括号

self.turtle和self.fish分别是Turtle和Fish的对象;
对象访问属性通过 “ . ” 来访问;
故没加.num它就会报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-3 00:25:49 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
代码没错:
print('水池里一共有%d只乌龟,%d条小鱼' % (self.turtle.number, self.fish.number)#漏了括号
self.turtle与self.fish是Turtle和Fish的对象。对象访问属性要通过 “.”来访问
故没加.num就会报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-3 01:21:27 From FishC Mobile | 显示全部楼层
.num是你在上面Turtle或Fish类里定义的属性
另外二楼的代码除了最后少了右括号外没错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-3 02:57:55 | 显示全部楼层
加上.num是实例变量,不加就是实例对象,根据你__init__里面设置名字走,写什么都行。
第二段代码只是更换变量名称应该是没有问题的,你贴上来的代码最后少了个后括号),运行会出EOL错误。
但是你给的异常报错是变量名称问题,应该是变量拼写和统一的问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-3 07:49:05 From FishC Mobile | 显示全部楼层
print('水池里一共有%d只乌龟,%d条小鱼' % (self.turtle.number, self.fish.number))#漏了括号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-3 08:47:40 | 显示全部楼层
  1. class Turtle:
  2.     def __init__(self, x):
  3.         self.number = x

  4. class Fish:
  5.     def __init__(self, x):
  6.         self.number = x

  7. class Pool:
  8.     def __init__(self, x, y):
  9.         self.turtle = Turtle(x)
  10.         self.fish = Fish(y)

  11.     def print_num(self):
  12.         print('水池里一共有%d只乌龟,%d条小鱼' % (self.turtle.number, self.fish.number))

  13. if __name__ == '__main__':
  14.     turtle = Turtle(5)
  15.     fish = Fish(4)

  16.     pool = Pool(4, 5)
  17.     pool.print_num()
复制代码

没毛病,看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-3 10:11:12 | 显示全部楼层

好的 谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-3 10:15:15 | 显示全部楼层
chakyam 发表于 2018-5-3 01:21
.num是你在上面Turtle或Fish类里定义的属性
另外二楼的代码除了最后少了右括号外没错

好的 谢谢  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-3 10:17:43 | 显示全部楼层
self.turtle和self.fish分别是 Turtle和Fish的对象,对象访问属性通过点‘.’来访问,故没加 .num就会报错。( .num 是上面Turtle类里面定义的属性)
sele.turtle 加上 .num 是实例变量,不加就是实力对象,根据__init__里面的名字走,写什么都行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-3 10:18:50 | 显示全部楼层
chakyam 发表于 2018-5-3 01:21
.num是你在上面Turtle或Fish类里定义的属性
另外二楼的代码除了最后少了右括号外没错

嗯呐  谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-3 12:20:09 | 显示全部楼层
self.turtle和self.fish分别是 Turtle和Fish的对象,对象访问属性通过点‘.’来访问,故没加 .num就会报错。( .num 是上面Turtle类里面定义的属性)
sele.turtle 加上 .num 是实例变量,不加就是实力对象,根据__init__里面的名字走,写什么都行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 20:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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