风眠 发表于 2023-9-2 16:01:05

莫名错误

代码:
class A:
      def say(self):
                print('FishA')

   
class B(A):
        def say(self):
                super().say()
                print('FishB')


class C(A):
        def say(self):
                super().say()
                print('FishC')

               
class D(B,C):
      def say(self):
                super().say()
               
c=C()
c.say()
指着第九行括号后面报错(语法错误)
给第九行加上#,还报错
错误窗口:
Tab/space error

Error: Inconsistent indentation detected!
1) Your indentation is outright incorrect (easy to fix), OR
2) Your indentation mixes tabs and spaces.
To fix case 2, change all tabs to spaces by using Edit-> Select AlI
followed by Format- > Untabify Region and specify the number of
columns used by each tab.
确定

陶远航 发表于 2023-9-2 16:01:20

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

修改后的代码如下所示:

class A:
    def say(self):
      print('FishA')

class B(A):
    def say(self):
      super().say()
      print('FishB')

class C(A):
    def say(self):
      super().say()
      print('FishC')

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

c = C()
c.say()


如果仍然遇到问题,请检查编辑器设置和缩进方式是否正确。另外,你可以尝试将整段代码复制粘贴到一个新的代码文件中,并确保缩进正确。希望这能解决你的问题,如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案

isdkz 发表于 2023-9-2 16:01:28

这个错误是因为代码中的缩进不一致导致的。Python中使用缩进来表示代码块,所有行的缩进必须一致,要么使用空格缩进,要么使用制表符缩进,不能混合使用。

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

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

修复后的代码如下所示:

class A:
    def say(self):
      print('FishA')

class B(A):
    def say(self):
      super().say()
      print('FishB')

class C(A):
    def say(self):
      super().say()
      print('FishC')

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

c = C()
c.say()


这样修改后,代码应该能够正确运行并输出"FishA"、"FishC"两个结果。

sfqxx 发表于 2023-9-2 16:04:51

缩进?

liuhongrun2022 发表于 2023-9-2 16:09:06

本帖最后由 liuhongrun2022 于 2023-9-2 16:11 编辑

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


class B(A):
    def say(self):
      super().say()
print('FishB')


class C(A):
      def say(self):
            super().say()
print('FishC')


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

c=C()
c.say()

风眠 发表于 2023-9-2 16:13:28

sfqxx 发表于 2023-9-2 16:04
缩进?

嗯,是

风眠 发表于 2023-9-2 16:14:18

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

谢谢

陶远航 发表于 2023-9-2 16:16:43

liuhongrun2022 发表于 2023-9-2 16:09
缩进问题,帮你修了一下,求最佳答案

不要误导小白,你这个无论如何都会先输出FishB以及FishC,还最佳答案???

陶远航 发表于 2023-9-2 16:17:48

风眠 发表于 2023-9-2 16:14
谢谢

不要相信5楼

风眠 发表于 2023-9-2 16:19:07

陶远航 发表于 2023-9-2 16:17
不要相信5楼

为什么?

liuhongrun2022 发表于 2023-9-2 16:19:52

风眠 发表于 2023-9-2 16:19
为什么?

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


class B(A):
    def say(self):
      super().say()
      print('FishB')


class C(A):
    def say(self):
      super().say()
      print('FishC')


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

c=C()
c.say()

陶远航 发表于 2023-9-2 16:21:29

风眠 发表于 2023-9-2 16:19
为什么?

这段代码定义了四个类: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,这么说你明白吗?

风眠 发表于 2023-9-2 16:21:40

本帖最后由 风眠 于 2023-9-2 16:23 编辑

额...好吧没细看

风眠 发表于 2023-9-2 16:22:06

风眠 发表于 2023-9-2 16:21
诶,是诶?!不应该是——等等耍我呢?!

我是要研究super()而不是......

陶远航 发表于 2023-9-2 16:22:15

风眠 发表于 2023-9-2 16:21
诶,是诶?!不应该是——等等耍我呢?!

???

liuhongrun2022 发表于 2023-9-2 16:22:16

风眠 发表于 2023-9-2 16:21
诶,是诶?!不应该是——等等耍我呢?!

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


class B(A):
    def say(self):
      super().say()
      print('FishB')


class C(A):
    def say(self):
      super().say()
      print('FishC')


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

c=C()
c.say()

陶远航 发表于 2023-9-2 16:22:46

liuhongrun2022 发表于 2023-9-2 16:19
sorry,没有细看,重新修改了一下:

liuhongrun你是不是拿我代码了???

liuhongrun2022 发表于 2023-9-2 16:23:20

陶远航 发表于 2023-9-2 16:22
liuhongrun你是不是拿我代码了???

并不,自己改了一下

陶远航 发表于 2023-9-2 16:24:06

liuhongrun2022 发表于 2023-9-2 16:23
并不,自己改了一下

@不二如是 错误答案

liuhongrun2022 发表于 2023-9-2 16:25:08

陶远航 发表于 2023-9-2 16:24
@不二如是 错误答案

没拿你代码,只是没有细看,之后我给出了正确答案{:10_277:}
页: [1] 2
查看完整版本: 莫名错误