super.__new__和object.__new__有什么区别
时间: 2023-05-18 07:02:45 浏览: 68
super().__new__()和object.__new__()都是用于创建新的实例对象的方法,但是它们的使用方式和作用有所不同。object.__new__()是Python中所有类的默认构造函数,它会创建一个新的实例对象并返回。而super().__new__()则是用于调用父类的构造函数,它会返回一个父类的实例对象。因此,super().__new__()可以用于多重继承中,以便在创建子类实例时调用多个父类的构造函数。
相关问题
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
用object.__new写一个简单的程序
可以使用以下代码:
class MyClass:
def __new__(cls):
print("Creating instance")
instance = super().__new__(cls)
return instance
my_object = MyClass() # Creating instance
这个程序定义了一个名为 MyClass 的类,它重写了 __new__ 方法。当创建 MyClass 的实例时,__new__ 方法将被调用。在这个例子中,__new__ 方法只是打印一条消息并返回一个新的 MyClass 实例。最后,我们创建了一个 MyClass 实例并将其存储在 my_object 变量中。