What is the difference between __init__ and __new__?
Each NEW-style python class has (or inherits from
object
class) a static method (can be called without creating an object) named __new__. When you call C(*args, **kwds)
to create a new instance of class C
, Python first calls C.__new__(C, *args, *kwds)
. Python uses __new__
's return value x as the newly created instance. Then Python calls C.__init__(x, *args, **kwds)
, but only when x is indeed an instance of C
or any of its subclasses.Thus, the statement
x=C(23)
is equivalent to:x = C.__new__(C, 23)if isinstance(x, C): type(x).__init__(x, 23)
So basically,
__new__
is just like new keyword in Java; __new__
and __init__
combine together provide the functionality of an object constructor!
No comments:
Post a Comment