descriptor '__init__' requires a 'super' object but received a 'str
时间: 2024-09-30 19:05:25 浏览: 18
这个错误通常发生在Python中,当你尝试通过继承创建一个类的时候,如果`__init__`方法没有正确的调用父类的初始化方法(即`super().__init__(...)`),就会抛出这样的异常。`__init__`是一个特殊的方法,用于类的实例化,它期望一个`super`对象以便调用父类的构造函数。
例如:
```python
class Parent:
def __init__(self):
print("Parent init")
class Child(Parent):
# 如果这里忘记调用 super().__init__()
# descriptor '__init__' requires a 'super' object but received a 'str'
def __init__(self):
print("Child init")
```
在这个例子中,你需要修正`Child`类的`__init__`,添加对父类的初始化:
```python
class Child(Parent):
def __init__(self):
super().__init__() # 添加这行来调用父类的构造函数
print("Child init")
```
相关问题
descriptor '__init__' requires a 'super' object but received a 'str'
这个错误是因为在子类中重写了父类的__init__方法,但是没有调用父类的__init__方法,需要在子类的__init__方法中使用super()来调用父类的__init__方法。可能是因为传入的参数类型错误导致的。
TypeError: descriptor '__init__' requires a 'super' object but received a 'Child'
TypeError: descriptor '__init__' requires a 'super' object but received a 'Child' 这种错误通常发生在尝试调用父类的构造方法(`__init__`)时,但是没有使用 `super()` 函数进行调用。Python 中,当子类直接调用自己的 `__init__` 而没有调用 `super(Child, self).__init__` 或简写 `super().__init__` 的时候,会引发这个错误,因为在这种情况下,`self` 对象实际上传递的是子类的实例,而不是 `super` 类型。
例如,如果你有如下的代码:
```python
class Parent:
def __init__(self):
print("Parent init")
class Child(Parent):
def __init__(self):
# 没有使用 super() 调用父类的构造方法
Parent.__init__(self) # 这将导致TypeError
child = Child()
```
正确的做法应该是:
```python
class Child(Parent):
def __init__(self):
super().__init__() # 使用 super() 来调用父类的构造方法
print("Child init") # 先执行父类的初始化,再执行子类的初始化
child = Child()
```