super.__new和object.__new的用法
时间: 2023-05-20 22:01:16 浏览: 54
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
相关问题
super.__new__和object.__new__有什么区别
super().__new__()和object.__new__()都是用于创建新的实例对象的方法,但是它们的使用方式和作用有所不同。object.__new__()是Python中所有类的默认构造函数,它会创建一个新的实例对象并返回。而super().__new__()则是用于调用父类的构造函数,它会返回一个父类的实例对象。因此,super().__new__()可以用于多重继承中,以便在创建子类实例时调用多个父类的构造函数。
Python 里的 super() 函数和 object.__new__ ()、.__del__() 方法
super() 函数是用于调用父类的方法。在子类中,如果想要调用父类的方法,可以使用super()函数来实现。例如,如果父类有一个名为`foo()`的方法,子类可以使用`super().foo()`来调用父类的方法。
而`object.__new__()`方法是在创建一个新的实例时调用的特殊方法。它负责创建并返回一个新的实例对象。一般情况下,我们不需要直接调用`object.__new__()`方法,而是使用类的构造函数来创建实例对象。
另外,`.__del__()`方法是在对象被销毁时调用的特殊方法。它可以用来执行一些资源释放或清理工作。但需要注意的是,由于垃圾回收机制的存在,不建议在`.__del__()`方法中进行太复杂的操作,因为无法确定对象何时被销毁。