[Tutor] common (sub)attributes

spir denis.spir at free.fr
Wed Feb 24 11:16:50 CET 2010


Hello,

Just a really basic note:
Classes are often used to hold common or default attribute. Then, some of these attrs may get custom values for individual objects of a given type. Simply by overriding the attr on this object (see code below). But this will not only if the attr is a top-level one; not if it is itself part of a composite object. In the latter case, the (sub)attribute is still shared, so the change affects everybody. So, we must redefine the whole top-level attr instead. Trivial, but not obvious for me ;-)


=== sample code ===
#!/usr/bin/env python
# coding: utf-8

# case x is top-level attr
class C(object):
	x = 0
	y = 0
	a = 'u'
	def __str__ (self) :
		return "C(%s,%s,%s)" %(self.x,self.y,self.a)
c1 = C() ; c2 = C()
c1.x = 1	# change x for c1 only
c1.a = 'v'	# change a for c1 only
print c1,c2	# ==> C(1,0,v) C(0,0,u)

# case x is element of composite attr
class P:
	x = 0
	y = 0
class C(object):
	p = P()
	a = 'u'
	def __str__ (self) :
		return "C(%s,%s,%s)" %(self.p.x,self.p.y,self.a)
c1 = C() ; c2 = C()
c1.p.x = 1	# change x for c1, but x is actually shared
c1.a = 'v'	# change a for c1 only
print c1,c2	# ==> C(1,0,v) C(1,0,u)


Denis
________________________________

la vita e estrany

http://spir.wikidot.com/


More information about the Tutor mailing list