Class Variable Inheritance

Brian Jones bojo at gvea.com
Thu Dec 9 01:55:09 CET 2004


I'm sure the solution may be obvious, but this problem is driving me 
mad.  The following is my code:

class a(object):

	mastervar = []

	def __init__(self):
		print 'called a'

class b(a):

	def __init__(self):
		print 'called b'
		self.mapvar()

	def mapvar(self):
		self.mastervar.append(['b'])

class c(b):

	def __init__(self):
		print 'called c'
		self.mapvar()

	def mapvar(self):
		super(c, self).mapvar()
		self.mastervar.append(['c'])

if __name__ == '__main__':

	a1 = a()
	b1 = b()
	c1 = c()
	d1 = c() # Call C again

	print a1.mastervar
	print b1.mastervar
	print c1.mastervar
	print d1.mastervar

What I don't understand is why mastervar gets modified by each _seperate 
instance_ of classes that happen to extend the base class 'a'. 
Shouldn't mastervar be contained within the scope of the inheriting 
classes?  Why is it being treated like a global variable and being 
modified by the other instances?


Thanks,

Brian "bojo" Jones



More information about the Python-list mailing list