1.9 KiB
1.9 KiB
La méthode new
Synthaxe
object.__new__(cls, *args, **kwargs)
La méthode object.__new__
:
- Crée les instances d'une classe (constructeur),
- Est appelée avant
object.__init__
, - Retourne une nouvelle instance ou une référence à une précedente (classes singleton).
Exemples
Utilisation classique
class B:
def __new__(cls, *args, **kwargs):
print("__new__ running", cls, args, kwargs)
return super().__new__(cls)
def __init__(self, *args, **kwargs):
print("__init__ running", self, args, kwargs)
return super().__init__(*args, **kwargs)
for i in range(2):
B()
__new__ running <class '__main__.B'> () {} __init__ running <__main__.B object at 0x7f78f614c040> () {} __new__ running <class '__main__.B'> () {} __init__ running <__main__.B object at 0x7f78f614c040> () {}
Singleton design pattern
class SingletonClass:
_instance = None
def __new__(cls, *args, **kwargs):
print("__new__ running", cls, args, kwargs)
if cls._instance is None: # Checking if an instance of this class exists
cls._instance = super().__new__(cls, *args, **kwargs) # Creating a new instace
return cls._instance # Returing the instance
for i in range(2):
print(f'{id(SingletonClass())=}')
__new__ running <class '__main__.SingletonClass'> () {} id(SingletonClass())=140699167274272 __new__ running <class '__main__.SingletonClass'> () {} id(SingletonClass())=140699167274272