super().__init__()和super(deblurNet,self).__init__()区别
时间: 2023-11-28 07:04:05 浏览: 30
`super().__init__()`和`super(deblurNet,self).__init__()`都是调用父类的构造函数,但是它们的实现方式略有不同。
`super().__init__()`是使用不带参数的`super()`函数来调用父类的构造函数,这种方式比较简洁,不需要显式地指定当前类的名称和对象。
`super(deblurNet,self).__init__()`则是显式地指定当前类的名称和对象,使用带参数的`super()`函数来调用父类的构造函数。其中,`deblurNet`是当前类的名称,`self`是当前类的对象。
总的来说,使用`super().__init__()`比较简洁,并且不需要显式地指定当前类的名称和对象,但是如果需要在多重继承的情况下调用指定的父类构造函数,就需要使用带参数的`super()`函数。
相关问题
super.__init__
在 Python 中,`super().__init__()` 是用来调用父类的构造函数(`__init__()` 方法)的语法。它通常在子类的构造函数中使用,以确保父类的初始化代码也被执行。
例如,假设有一个父类 `BaseClass` 和一个子类 `SubClass`,子类想要调用父类的构造函数来完成一些初始化工作。可以在子类的构造函数中使用 `super().__init__()` 来实现这个目的,如下所示:
```python
class BaseClass:
def __init__(self):
# 父类的初始化代码
pass
class SubClass(BaseClass):
def __init__(self):
super().__init__() # 调用父类的构造函数
# 子类的初始化代码
pass
```
在上面的例子中,当创建 `SubClass` 的实例时,子类的构造函数会先调用父类的构造函数,然后再执行子类的初始化代码。这样可以确保父类和子类的初始化工作都被正确执行。
super.__new和object.__new的用法
super.__new和object.__new都是Python中的构造函数,用于创建新的实例对象。但是它们的用法有所不同。
object.__new__是Python中所有类的默认构造函数,它接受一个类作为参数,并返回一个新的实例对象。通常情况下,我们不需要重写它。
而super.__new__是用于继承中的构造函数,它接受两个参数:子类和子类的实例对象。它会调用父类的构造函数,并返回一个新的实例对象。通常情况下,我们需要在子类中重写它,以便在创建实例对象时调用父类的构造函数。
例如,假设我们有一个父类Animal和一个子类Dog,我们可以在Dog中重写super.__new__,以便在创建Dog实例对象时调用Animal的构造函数:
class Animal:
def __init__(self, name):
self.name = name
class Dog(Animal):
def __new__(cls, name):
print("Creating a new Dog instance")
return super().__new__(cls)
def __init__(self, name):
super().__init__(name)
d = Dog("Fido")
print(d.name)
输出结果为:
Creating a new Dog instance
Fido