93
I am learning Python, and so far I understand the following about __new__ and __init__:
__new__is for object creation__init__is for object initialization__new__is invoked before__init__, as__new__returns a new instance and__init__is invoked afterwards to initialize inner state.__new__is good for immutable objects, as they cannot be modified after creation. So, we can return a new instance with a new state.- We can use
__new__and__init__for mutable object as well since their inner state can be changed.
But I have other questions now.
- When I create a new instance such as
a = MyClass("hello","world"), how are these arguments passed? I mean, how I should I structure the class using__init__and__new__since they both accept arbitrary arguments beyond the default first argument? - Can the
selfkeyword be changed to something else in name only? Similarly, canclsalso be renamed, since it is just a parameter?
I made a little experiments as such below:
>>> class MyClass(tuple):
def __new__(tuple):
return [1,2,3]
and then:
>>> a = MyClass()
>>> a
[1, 2, 3]
Even through I said I want to return tuple, this code works fine and returned [1,2,3] (a list). I thought the first parameter to new should be the type of the instance we want to return. We're talking about the new function, right? I'm not familiar with how return types work in other languages in this context, beyond the concept of a bound type.
I also tried this:
>>> issubclass(MyClass,list)
Fa