Python函数__new__及__init__作用及区别解析
时间: 2023-10-26 17:06:41 浏览: 92
在 Python 中,`__new__` 和 `__init__` 都是用于构造对象的特殊方法。它们有一些共同点,但也有一些重要的区别。
`__new__` 方法是用于创建一个类的实例对象的。它是一个类方法,第一个参数是类本身。这个方法返回一个新的对象,这个对象将被传递给 `__init__` 方法。
`__init__` 方法则是用于初始化对象的。它是一个实例方法,第一个参数是实例对象本身。这个方法可以用来设置实例的属性和其他操作。
区别:
1. `__new__` 方法返回一个新的实例对象,而 `__init__` 方法初始化这个实例对象。
2. `__new__` 方法是一个类方法,而 `__init__` 方法是一个实例方法。
3. `__new__` 方法的第一个参数是类本身,而 `__init__` 方法的第一个参数是实例对象本身。
4. `__new__` 方法必须返回一个实例对象,而 `__init__` 方法不需要返回任何值。
在一般情况下,我们不需要重写 `__new__` 方法,因为 Python 提供了默认的 `__new__` 实现。但是在某些情况下,比如自定义元类时,可能需要重写 `__new__` 方法。而 `__init__` 方法则是常规的初始化方法,我们在创建类时通常都要定义它。
相关问题
在有import cv2 的情况下if shape[::-1] != new_unpad: img = cv2.resize(img, new_unpad, interpolation=cv2.INTER_LINEAR) top, bottom = int(round(dh - 0.1)), int(round(dh + 0.1)) left, right = int(round(dw - 0.1)), int(round(dw + 0.1)) img = cv2.copyMakeBorder(img, top, bottom, left, right, cv2.BORDER_CONSTANT, value=color) return img, ratio, (dw, dh)警告:Cannot find reference 'resize' in '__init__.py'Cannot find reference 'INTER_LINEAR' in '__init__.py'Cannot find reference 'copyMakeBorder' in '__init__.py'Cannot find reference 'BORDER_CONSTANT' in '__init__.py'
这个警告信息的意思是无法在当前的代码文件中找到cv2.resize、cv2.INTER_LINEAR、cv2.copyMakeBorder和cv2.BORDER_CONSTANT这些函数或常量的定义。这通常是由于缺少必要的库文件或者没有正确安装OpenCV库导致的。你需要确保已经正确安装了OpenCV库,并且在代码中正确地导入了该库。你可以尝试使用以下语句导入OpenCV库:
```python
import cv2
```
同时,如果你使用的是PyCharm等IDE,需要在项目的Python解释器中添加OpenCV库作为依赖项,以便正确地解析OpenCV库中的函数和常量。
阅读全文