Usefulness of def __init__(self)?
python
Solution
Yeah, check this out:
class A(object):
def __init__(self):
self.lst = []
class B(object):
lst = []
and now try:
>>> x = B()
>>> y = B()
>>> x.lst.append(1)
>>> y.lst.append(2)
>>> x.lst
[1, 2]
>>> x.lst is y.lst
True
and this:
>>> x = A()
>>> y = A()
>>> x.lst.append(1)
>>> y.lst.append(2)
>>> x.lst
[1]
>>> x.lst is y.lst
False
Does this mean that x in class B is established before instantiation?
Yes, it's a class attribute (it is shared between instances). While in class A it's an instance attribute. It just happens that strings are immutable, thus there is no real difference in your scenario (except that class B uses less memory, because it defines only one string for all instances). But there is a huge one in my example.
Problem
I am fairly new to python, and noticed these posts: Python __init__ and self what do they do? and Python Classes without using def __init__(self) After playing around with it, however, I noticed that these two classes give apparently equivalent results- ``` class A(object): def __init__(self): self.x = 'Hello' def method_a(self, foo): print self.x + ' ' + foo ``` (from this question) and ``` class B(object): x = 'Hello' def method_b(self,foo): print self.x + ' ' + foo ``` Is there any real difference between these two? Or, more generally, does `__init__` change anything inherently about the attributes of a class? In the documentation it is mentioned that `__init__` is called when the instance is created. Does this mean that `x` in class `B` is established before instantiation?