TypeError: descriptor '__init__' requires a 'super' object but received a 'Child'
时间: 2024-09-27 17:08:23 浏览: 36
TypeError: _queue_reduction(): incompatible function arguments.
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()
```
阅读全文