鱼C论坛

 找回密码
 立即注册
查看: 1411|回复: 21

[已解决]莫名错误

[复制链接]
发表于 2023-9-2 16:01:05 | 显示全部楼层 |阅读模式

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

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

x
代码:
  1. class A:
  2.         def say(self):
  3.                 print('FishA')

  4.    
  5. class B(A):
  6.         def say(self):
  7.                 super().say()
  8.                 print('FishB')


  9. class C(A):
  10.         def say(self):
  11.                 super().say()
  12.                 print('FishC')

  13.                
  14. class D(B,C):
  15.         def say(self):
  16.                 super().say()
  17.                
  18. c=C()
  19. c.say()
复制代码

指着第九行括号后面报错(语法错误)
给第九行加上#,还报错
错误窗口:
  1. Tab/space error

  2. Error: Inconsistent indentation detected!
  3. 1) Your indentation is outright incorrect (easy to fix), OR
  4. 2) Your indentation mixes tabs and spaces.
  5. To fix case 2, change all tabs to spaces by using Edit-> Select AlI
  6. followed by Format- > Untabify Region and specify the number of
  7. columns used by each tab.
  8. 确定
复制代码
最佳答案
2023-9-2 16:21:29

这段代码定义了四个类:A, B, C, D,它们之间有继承关系。类A是基类,类B和类C都继承了类A,类D继承了类B和类C。每个类都有一个say方法,它会打印出类的名字,并调用父类的say方法(如果有的话)。最后,代码创建了一个C类的实例c,并调用了它的say方法。

这段代码的输出是:

FishA FishC

这是因为,当c.say()被调用时,它会先打印出’FishC’,然后调用super().say(),这会调用它在继承顺序中的下一个类的say方法,也就是类A的say方法。类A的say方法会打印出’FishA’,然后结束,因为它没有父类。所以,最终的输出是两行:‘FishA’和’FishC’。


而5楼liu的代码是无论如何都会先输出FishB以及FishC,这么说你明白吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-2 16:01:20 | 显示全部楼层
根据你提供的代码,我检查了一下缩进,并没有发现明显的问题。这个错误信息通常表示缩进混合了制表符和空格,导致了不一致的缩进。建议你检查一下整个代码文件中的缩进,并确保始终使用相同的缩进方式(要么是制表符,要么是空格)。此外,建议使用4个空格作为一个缩进级别,这是Python官方推荐的写法。

修改后的代码如下所示:

  1. class A:
  2.     def say(self):
  3.         print('FishA')

  4. class B(A):
  5.     def say(self):
  6.         super().say()
  7.         print('FishB')

  8. class C(A):
  9.     def say(self):
  10.         super().say()
  11.         print('FishC')

  12. class D(B, C):
  13.     def say(self):
  14.         super().say()

  15. c = C()
  16. c.say()
复制代码


如果仍然遇到问题,请检查编辑器设置和缩进方式是否正确。另外,你可以尝试将整段代码复制粘贴到一个新的代码文件中,并确保缩进正确。希望这能解决你的问题,如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-9-2 16:01:28 | 显示全部楼层
这个错误是因为代码中的缩进不一致导致的。Python中使用缩进来表示代码块,所有行的缩进必须一致,要么使用空格缩进,要么使用制表符缩进,不能混合使用。

在这段代码中,第九行的缩进不一致,导致了错误。你可以使用编辑器的格式化功能来修复这个错误,将所有的缩进都改成一致的。

另外,这段代码中还存在一个问题,就是在类D的say方法中,没有添加打印语句,导致程序运行时可能会出现意外结果。你可以在D的say方法中添加一行打印语句,例如print('FishD'),以便在调用c.say()时能够正确输出结果。

修复后的代码如下所示:

  1. class A:
  2.     def say(self):
  3.         print('FishA')

  4. class B(A):
  5.     def say(self):
  6.         super().say()
  7.         print('FishB')

  8. class C(A):
  9.     def say(self):
  10.         super().say()
  11.         print('FishC')

  12. class D(B, C):
  13.     def say(self):
  14.         super().say()
  15.         print('FishD')

  16. c = C()
  17. c.say()
复制代码


这样修改后,代码应该能够正确运行并输出"FishA"、"FishC"两个结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-2 16:04:51 | 显示全部楼层
缩进?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-2 16:09:06 | 显示全部楼层
本帖最后由 liuhongrun2022 于 2023-9-2 16:11 编辑

缩进问题,帮你修了一下,求最佳答案
  1. class A:
  2.     def say(self):
  3.         print('FishA')


  4. class B(A):
  5.     def say(self):
  6.         super().say()
  7. print('FishB')


  8. class C(A):
  9.         def say(self):
  10.             super().say()
  11. print('FishC')


  12. class D(B,C):
  13.     def say(self):
  14.         super().say()

  15. c=C()
  16. c.say()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-2 16:13:28 | 显示全部楼层

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

使用道具 举报

 楼主| 发表于 2023-9-2 16:14:18 | 显示全部楼层
陶远航 发表于 2023-9-2 16:01
根据你提供的代码,我检查了一下缩进,并没有发现明显的问题。这个错误信息通常表示缩进混合了制表符和空格 ...

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

使用道具 举报

发表于 2023-9-2 16:16:43 | 显示全部楼层
liuhongrun2022 发表于 2023-9-2 16:09
缩进问题,帮你修了一下,求最佳答案

不要误导小白,你这个无论如何都会先输出FishB以及FishC,还最佳答案???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-2 16:17:48 | 显示全部楼层

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

使用道具 举报

 楼主| 发表于 2023-9-2 16:19:07 | 显示全部楼层

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

使用道具 举报

发表于 2023-9-2 16:19:52 | 显示全部楼层

sorry,没有细看,重新修改了一下:
  1. class A:
  2.     def say(self):
  3.         print('FishA')


  4. class B(A):
  5.     def say(self):
  6.         super().say()
  7.         print('FishB')


  8. class C(A):
  9.     def say(self):
  10.         super().say()
  11.         print('FishC')


  12. class D(B,C):
  13.     def say(self):
  14.         super().say()

  15. c=C()
  16. c.say()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-2 16:21:29 | 显示全部楼层    本楼为最佳答案   

这段代码定义了四个类:A, B, C, D,它们之间有继承关系。类A是基类,类B和类C都继承了类A,类D继承了类B和类C。每个类都有一个say方法,它会打印出类的名字,并调用父类的say方法(如果有的话)。最后,代码创建了一个C类的实例c,并调用了它的say方法。

这段代码的输出是:

FishA FishC

这是因为,当c.say()被调用时,它会先打印出’FishC’,然后调用super().say(),这会调用它在继承顺序中的下一个类的say方法,也就是类A的say方法。类A的say方法会打印出’FishA’,然后结束,因为它没有父类。所以,最终的输出是两行:‘FishA’和’FishC’。


而5楼liu的代码是无论如何都会先输出FishB以及FishC,这么说你明白吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-2 16:21:40 | 显示全部楼层
本帖最后由 风眠 于 2023-9-2 16:23 编辑

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

使用道具 举报

 楼主| 发表于 2023-9-2 16:22:06 | 显示全部楼层
风眠 发表于 2023-9-2 16:21
诶,是诶?!不应该是——等等耍我呢?!

我是要研究super()而不是......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-2 16:22:15 | 显示全部楼层
风眠 发表于 2023-9-2 16:21
诶,是诶?!不应该是——等等耍我呢?!

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

使用道具 举报

发表于 2023-9-2 16:22:16 | 显示全部楼层
风眠 发表于 2023-9-2 16:21
诶,是诶?!不应该是——等等耍我呢?!

sorry,没有细看,重新修改了一下:
  1. class A:
  2.     def say(self):
  3.         print('FishA')


  4. class B(A):
  5.     def say(self):
  6.         super().say()
  7.         print('FishB')


  8. class C(A):
  9.     def say(self):
  10.         super().say()
  11.         print('FishC')


  12. class D(B,C):
  13.     def say(self):
  14.         super().say()

  15. c=C()
  16. c.say()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-2 16:22:46 | 显示全部楼层
liuhongrun2022 发表于 2023-9-2 16:19
sorry,没有细看,重新修改了一下:

liuhongrun你是不是拿我代码了???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-2 16:23:20 | 显示全部楼层
陶远航 发表于 2023-9-2 16:22
liuhongrun你是不是拿我代码了???

并不,自己改了一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-2 16:24:06 | 显示全部楼层
liuhongrun2022 发表于 2023-9-2 16:23
并不,自己改了一下

@不二如是 错误答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-2 16:25:08 | 显示全部楼层
陶远航 发表于 2023-9-2 16:24
@不二如是 错误答案

没拿你代码,只是没有细看,之后我给出了正确答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 16:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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