AttributeError: 'super' 对象没有属性

Mar*_*dus 2 python oop python-3.x

我写了以下代码。当我尝试在文件末尾运行它时,我得到了这个堆栈跟踪:

AttributeError: 'super' object has no attribute do_something
Run Code Online (Sandbox Code Playgroud)


class Parent:
    def __init__(self):
        pass

    def do_something(self, some_parameter, next_parameter):
        if type(some_parameter) is not int:
            raise AttributeError("Some message")
        if type(next_parameter) is not int:
            raise AttributeError("Some message")


class Child(Parent):
    def __init__(self):
        super(Parent).__init__()

    def do_something(self, some_parameter, next_parameter):
        super(Parent).do_something(some_parameter, next_parameter)
        return some_parameter + next_parameter


object = Child()
object.do_something(2, 2)
Run Code Online (Sandbox Code Playgroud)

我应该如何解决这个问题,我在这个简单的继承示例中的错误在哪里?

Blc*_*ght 10

您将错误的参数传递给super. 如果您要传递参数,则它们需要是当前类和实例,而不是您期望调用的父类。或者假设你使用的是 Python 3,你可以完全跳过参数,编译器无论如何都会让它为你工作。super允许使用一个参数进行调用,但它会返回一个几乎没有用的“未绑定超级对象”。

更改您的调用以使用以下样式之一:

class Child(Parent):
   def __init__(self):
      super().__init__()   # no arguments is almost always best in Python 3

   def do_something(self, some_parameter, next_parameter):
      super(Child, self).do_something(some_parameter, next_parameter) # name the current class
      return some_parameter + next_parameter 
Run Code Online (Sandbox Code Playgroud)

我还注意到你的类型检查Parent.do_something相当尴尬。而不是type(some_parameter) is not int,使用isinstance(some_parameter, int)(除非您故意要排除子类型)。