4

In python we can access class and object directly without using/initialize __init__ special method? Is __init__ same also a constructor?

martineau
  • 119,623
  • 25
  • 170
  • 301
  • 1
    Yes, it's similar to constructors in other languages. – Barmar Jul 02 '21 at 20:28
  • 1
    (1) Yes, (2) no. Was there a particular problem with something you tried? – mkrieger1 Jul 02 '21 at 20:28
  • 2
    It's optional if you don't need to initialize anything when the new instance is created. – Barmar Jul 02 '21 at 20:28
  • This topic has been already picked up so many times on StackOverflow. I think this is the most popular: https://stackoverflow.com/questions/8609153/why-do-we-use-init-in-python-classes – blazej Jul 02 '21 at 20:56

1 Answers1

1

In fact it is not a constructor. As it's name says, it's "initializer". In python __new__ constructs the new instances and then __init__ initializes it.

If you don't want to do initialization, you don't need to implement it.

S.B
  • 13,077
  • 10
  • 22
  • 49
  • How exactly does this differ from constructors in, say, Java, which also initialise newly-created objects? Wikipedia's article on [constructors](https://en.wikipedia.org/wiki/Constructor_(object-oriented_programming)) says, for example, *"They have the task of initializing the object's data members"*; do you have a source which says that is not the job of a constructor? – kaya3 Jul 02 '21 at 23:06
  • @kaya3 unfortunately I don't know about what's going on in Java. In python `__new__` has the duty of creating new instance object. Of course you can interpret that and do your "initialization" there if you want and skip the `__init__` method totally. But mostly we do initialization in `__init__`. As a proof, Try to implement `__new__` method and return something else like `10`. Then the `__init__` won't get called at all. `__init__` gets called exactly after the `__new__` method created the object (if the conditions are present). – S.B Jul 03 '21 at 10:35
  • In Java, the `new` keyword creates the object, and a constructor initialises the new object, just like Python's `__init__`. I've heard it said that, for this reason, Java's constructors are not really constructors, they are initialisers - but this doesn't seem to agree with the way the word "constructor" is used by authoritative sources, so I'm wondering if you know of a textbook or other source which does distinguish between constructors vs. initialisers as general, language-independent terms (as opposed to in a specific language like C#). – kaya3 Jul 03 '21 at 10:40
  • Compare for example, Javascript's so-called "arrays" which are really lists, and PHP's so-called "arrays" which are really maps or associative arrays. Those languages use the word "array" in a non-standard way compared to how authoritative sources define the word "array", so it's entirely possible there's a standard by which Java's "constructors" are not truly constructors; I just don't know of one. – kaya3 Jul 03 '21 at 10:43
  • @kaya3 https://docs.python.org/3/reference/datamodel.html#object.__new__ It uses the word constructor for `__new__` and initializer for `__init__` – S.B Jul 03 '21 at 10:49
  • I'm not saying `__init__` does create a new instance or that `__new__` doesn't. I'm saying that creating a new instance isn't required for something to be called a constructor, at least in popular languages like Java (and many others). – kaya3 Jul 03 '21 at 10:51
  • @kaya3 maybe that's because i'm strange with other languages. Construction for me implies the "creation" of something new. – S.B Jul 03 '21 at 10:56