object .__ new __ (cls [, ...])
-> object
cls - Reference to the type (class) for which object construction is requested.
... - Positional and / or named arguments that play role in the process of constructing an instance. These are the same arguments that are passed to the call to the class.
Note
The method is mainly used to modify the process of creating both an instance of a class and the class itself ... For the latter case, it can be defined in the metaclass.
class Something:
def __new __ (cls, * args, * * kwargs):
print (f’ construct: {args} | {kwargs} ’)
instance = super () .__ new __ (cls)
# and suddenly we wanted to add attribute on the fly
instance.new_attribute = ’added’
print (’ almost done’)
return instance
def __init __ (self, * args, ** kwargs):
print (f’ initialize: {args} | {kwargs} ’)
print (self.new_attribute)
my_obj = Something (’ time’, other = 4 )
# construct: (’time’,) | {’other’: 4}
# almost done
# initializing: (’ time’,) | {’other’: 4}
# added
my_obj.new_attribute #’ added’
Notes
The method is static, but for simplicity Python allows you to omit @staticmethod explicitly.
The result is expected to be
__ new __ ()
will be an object. This is usually an instance of the cls
class, which is created by calling the parent __new __ ()
. If an object is returned, then __init __ () will be called for it. In this case, the first argument ( self
) for this __init __ ()
will be the mentioned created instance, and the rest of the arguments will be those passed when calling the class.
Warning
If the method returns None , then __init __ ()
is not called.