📅  最后修改于: 2023-12-03 15:13:14.343000             🧑  作者: Mango
在Python中的每个类都有一个名为__new__
的方法。这个方法会在创建这个类的实例(对象)时被调用,它是一个静态方法。
__new__
方法是如何工作的在每个类中,“new”方法是一个静态方法,用于创建并返回一个新的对象。该方法被调用时,已经知道要创建哪个类的实例(对象),并已确定要传递哪些参数。通常,”new”方法执行以下步骤:
以下是一个示例,展示了如何在类中实现__new__
方法:
class Example:
def __new__(cls, *args, **kwargs):
obj = super().__new__(cls)
obj.attribute = 'value'
return obj
在这个示例中,创建了一个类Example。它有一个__new__
方法,该方法创建一个新的实例对象,并使用obj.attribute='value'
为这个对象设置了一些状态,最后返回该对象的引用。
__init__
方法的区别与__new__
方法不同,__init__
方法是一个实例方法,在实例化时被调用。在__init__
方法中,我们通常初始化对象的属性。
以下是一个示例,展示了__init__
和__new__
方法之间的区别:
class Example:
def __new__(cls, *args, **kwargs):
print('Creating new instance')
return super().__new__(cls)
def __init__(self, *args, **kwargs):
print('Initializing instance')
self.attribute = 'value'
在这个示例中,我们创建了一个Example类并实现了它的__new__
和__init__
方法。当我们尝试实例化这个类时,我们将得到以下输出:
Creating new instance
Initializing instance
__new__
__new__
方法可以被自定义以满足特定的需求。例如,假设我们想要确保创建的对象是单例的(即在应用程序中只有一个实例),我们可以使用下面这个示例中的代码:
class Singleton:
_instance = None
def __new__(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = super().__new__(cls)
cls._instance.initialized = False
return cls._instance
def __init__(self, *args, **kwargs):
if self.initialized:
return
print('Initializing Singleton object.')
self.initialized = True
在这个示例中,创建了一个Singleton类。它的__new__
方法确保只存在一个实例对象(比较了单例类的类变量 _instance
是否为 None
),如果实例对象还不存在,就创建实例对象,并初始化它;如果实例对象已存在,直接返回现有实例对象。
__new__
方法是静态方法,用于创建并返回新对象的实例。__init__
方法是实例方法,在实例化时被调用,用于初始化对象的属性。__new__
方法可以自定义以满足特定需求,如确保对象的单例化。