Skip to content

Instantly share code, notes, and snippets.

@thenigan
Created August 6, 2010 16:24
Show Gist options
  • Save thenigan/511569 to your computer and use it in GitHub Desktop.
Save thenigan/511569 to your computer and use it in GitHub Desktop.
class ExampleClass:
classVar = "classVar"
def __init__(self):
self.instanceVar = "instanceVar"
class BorgClass:
__shared_state = {}
classVar = "classVar"
def __init__(self):
self.__dict__ = self.__shared_state
self.instanceVar = "instanceVar"
print "Assume this class:\n"
print "class ExampleClass:"
print " classVar = 'classVar'"
print " def __init__(self):"
print " self.instanceVar = 'instanceVar'\n"
print "(1) classVars can be printed before an instance of the class exists:\n"
print ">>> ExampleClass.classVar"
print ExampleClass.classVar, "\n"
print "(2) instanceVars can only be printed once an instance exists:\n"
print ">>> ExampleClass.instanceVar"
print "Traceback (most recent call last):"
print " File '<stdin>', line 1, in <module>"
print "AttributeError: class ExampleClass has no attribute 'instanceVar'\n"
print "(3) Setting a class variable from an instance of the class doesn't quite do what we'd expect:\n"
print ">>> a = ExampleClass()"
a = ExampleClass()
print ">>> b = ExampleClass()"
b = ExampleClass()
print ">>> a.classVar = 'fizzbuzz'"
a.classVar = "fizzbuzz"
print ">>> print a.classVar"
print a.classVar
print ">>> print b.classVar"
print b.classVar, "\n"
print "(3b) We can achieve a unified class variable by adding the __class__ reference:\n"
print ">>> c = ExampleClass()"
c = ExampleClass()
print ">>> d = ExampleClass()"
d = ExampleClass()
print ">>> c.__class__.classVar = 'fizzbuzz'"
c.__class__.classVar = "fizzbuzz"
print ">>> print c.classVar"
print c.classVar
print ">>> print d.classVar"
print d.classVar, "\n"
#*******************************************************88
class BorgClass:
__shared_state = {} # empty dict
classVar = "classVar" # class variable
def __init__(self):
self.__dict__ = self.__shared_state
self.instanceVar = "instanceVar"
print "Now assume this 'Borg' class:\n"
print "class BorgClass:"
print " __shared_state = {} # empty dict"
print " classVar = 'classVar' # class variable\n"
print " def __init__(self):"
print " self.__dict__ = self.__shared_state # bind individual dicts to class variable dict"
print " self.instanceVar = 'instanceVar' # instance var\n"
print "(4) the Borg nature of this class means that class vars will change 'as one':\n"
print ">>> e = BorgClass()"
e = BorgClass()
print ">>> f = BorgClass()"
f = BorgClass()
print ">>> e.classVar = 'fizzbuzz'"
e.classVar = "fizzbuzz"
print ">>> print e.classVar"
print e.classVar
print ">>> print f.classVar"
print f.classVar, "\n"
print "(5) even instance variables move 'as one' in a Borg class:\n"
print ">>> print e.instanceVar"
print e.instanceVar
print ">>> print f.instanceVar"
print f.instanceVar
print ">>> e.instanceVar = 'modified text'"
e.instanceVar = "modified text"
print ">>> print e.instanceVar"
print e.instanceVar
print ">>> print f.instanceVar"
print f.instanceVar
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment