Package Gnumed :: Package pycommon :: Module gmBorg
[frames] | no frames]

Source Code for Module Gnumed.pycommon.gmBorg

 1  #=================================================== 
 2  # Thanks to Python Patterns ! 
 3  # --------------------------- 
 4  __author__ = "Karsten.Hilbert@gmx.net" 
 5  __license__ = "GPL v2 or later" 
 6   
 7  #=================================================== 
8 -class cBorg(object):
9 """A generic Borg mixin for new-style classes. 10 11 - mixin this class with your class' ancestors to borg it 12 13 - there may be many _instances_ of this - PER CHILD CLASS - but they all share _state_ 14 """ 15 _instances = {} 16
17 - def __new__(cls, *args, **kargs):
18 # look up subclass instance cache 19 if cBorg._instances.get(cls) is None: 20 #cBorg._instances[cls] = object.__new__(cls, *args, **kargs) 21 cBorg._instances[cls] = object.__new__(cls) 22 return cBorg._instances[cls]
23 24 #=================================================== 25 if __name__ == '__main__': 26 27 import sys 28 29 if len(sys.argv) < 2: 30 sys.exit() 31 32 if sys.argv[1] != 'test': 33 sys.exit() 34 35
36 - class A(cBorg):
37 pass
38
39 - class B(cBorg):
40 pass
41
42 - class C(cBorg):
43 - def __init__(self, val='default'):
44 self.x = val
45 46 print("testing new-style classes borg") 47 a1 = A() 48 a2 = A() 49 a1.a = 5 50 print(a1.a, "==", a2.a) 51 a3 = A() 52 print(a1.a, "==", a2.a, "==", a3.a) 53 b1 = B() 54 b1.a = 10 55 print(b1.a) 56 print(a1.a) 57 b2 = B() 58 print(b2.a) 59 60 c1 = C(val = 'non-default') 61 print(c1.x) 62 c2 = C(val = 'non-default 2') 63 print(c2.x) 64 c3 = C() 65 print(c3.x) 66 67 #=================================================== 68