Welcome, guest | Sign In | My Account | Store | Cart
class NamedShare(type):
	def __init__( cls, name, bases, classdict ):
		super( NamedShare, cls ).__init__( name, bases, classdict )
		cls.__instances = {}
	def __call__( cls, *args, **kw ):
		if kw.has_key( 'share' ):
			key = kw.get( 'share' )
			del( kw['share'] )
		else:
			key = 'default'
		if not cls.__instances.has_key( key ):
			cls.__instances[key] = super( NamedShare, cls ).__call__( *args, **kw )
		return cls.__instances[key]

# Test/Example Code
if __name__ == '__main__':
	
	class sharedDict( dict ):
		__metaclass__ = NamedShare
	
	class SD2( sharedDict ):
		pass
	
	D1 = sharedDict( a='a', b='b', c='c' )
	D2 = sharedDict( share='share2', d='d', e='e', f='f' )
	D3 = sharedDict( share='share3' )
	D4 = sharedDict()
	D5 = sharedDict( share='share3' )
	
	D6 = SD2()
	
	assert ( D2 is not D1 )
	assert ( D3 is not D1 )
	assert ( D3 is not D2 )
	assert ( D4 is D1 )
	assert ( D5 is D3 )
	assert ( D6 is not D1 )
	
	for s in ['g','h','i']:
		sharedDict(share='share3')[s] = s
	
	for s in ['g','h','i']:
		sharedDict(share='share3')[s] = s
	
	print "D1 (", id(D1), ") =", D1
	print "D2 (", id(D2), ") =", D2
	print "D3 (", id(D3), ") =", D3
	print "D4 (", id(D4), ") =", D4
	print "D5 (", id(D5), ") =", D5
	print "D6 (", id(D6), ") =", D6

History

  • revision 2 (19 years ago)
  • previous revisions are not available