TypeError: object.__new__() takes exactly one argument (the type to instantiate)
时间: 2024-03-09 15:44:40 浏览: 155
这个错误通常发生在我们使用了错误的参数来调用类的构造函数。在 Python 中,类的构造函数是 `__new__` 和 `__init__` 方法。其中,`__new__` 方法用于创建类的实例,而 `__init__` 方法用于初始化实例的属性。
这个错误的原因是我们传递了太多的参数给 `__new__` 方法。在 Python 中,`__new__` 方法的第一个参数是要实例化的类本身,后面的参数是我们传递给构造函数的参数。如果我们传递了太多的参数,就会出现这个错误。
例如,以下代码会引发这个错误:
```python
class MyClass:
def __new__(self, arg1, arg2):
return super(MyClass, self).__new__(self, arg1, arg2)
obj = MyClass("Hello", "World")
```
在这个例子中,我们传递了两个参数给 `MyClass` 的构造函数,但是我们的 `__new__` 方法接收了三个参数。正确的写法应该是这样的:
```python
class MyClass:
def __new__(cls, arg1, arg2):
return super(MyClass, cls).__new__(cls)
def __init__(self, arg1, arg2):
self.arg1 = arg1
self.arg2 = arg2
obj = MyClass("Hello", "World")
```
在这个例子中,我们将 `__new__` 方法的第一个参数改为 `cls`,以避免与传递给方法的参数混淆。然后,我们在 `__new__` 方法中调用了 `super()` 函数的 `__new__` 方法,从而创建了一个类的实例。在 `__init__` 方法中,我们将参数存储在实例属性中,以便稍后使用。
阅读全文