Question

class C2:
  x = 2
  z = 2

class C3:
  w = 3
  z = 3

  def __init__(self):
    self.w += 1

class C1(C2, C3):
  x = 1
  y = 1

I1 = C1()
I1.name = 'I1'

I2 = C1()
I2.name = 'I2'

print I1.w  # 4
print I2.w  # 4
print C3.w  # 3

Can you explain me the results from last 3 prints? I can't find the logic in this :)

Was it helpful?

Solution

I'm not sure how self.w += 1 will create an instance variables instead of just increment class variable or raise an exception for missing instance variable?

This might help you understand it:

>>> class Foo:
...  x = 1
...  def __init__(self):
...   print 'self =', self
...   print 'self x =', self.x
...   print 'foo x =', Foo.x
...   print self.x is Foo.x
...   Foo.x = 2
...   self.x = 3
...   print 'self x =', self.x
...   print 'foo x =', Foo.x
... 
>>> a = Foo()
self = <__main__.Foo instance at 0x1957c68>
self x = 1
foo x = 1
True
self x = 2
foo x = 3
>>> print a
<__main__.Foo instance at 0x1957c68>

OTHER TIPS

I'm not sure what you're confused about. C3 defines an __init__ method that increases the value of self.w. So, both instances will get instance variables with a value of 4, whereas the class object itself has a class variable with the value of 3.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top