File: LP6E/Chapter39/access_builtins_TEST.py
from importlib import import_module
def xprint(msg):
x, y = msg.split()
print(x.ljust(10), y)
mods = ['access_builtins_' + scheme
for scheme in ('inline_direct', 'mixin_direct', 'mixin_getattr', 'mixin_desc')]
for modname in mods:
modobj = import_module(modname)
print(modobj.__name__.center(48, '-'))
@modobj.Private('sum') # Add '__add__' to see if/how it's validated
class Tally: # Disable @ altogether to see default case
def __init__(self):
self.sum = 0
def __add__(self, add):
self.sum += add
X = Tally()
try: X.sum
except: xprint('sum failed')
else: xprint('sum worked')
try: X.__add__(5)
except: xprint('__add__ failed')
else: xprint('__add__ worked')
try: X + 5
except: xprint('+ failed')
else: xprint('+ worked')
try: assert X._onInstance__wrapped.sum == 10
except: xprint('__wrapped failed')
else: xprint('__wrapped worked')
try: assert X._wrapped.sum == 10
except: xprint('_wrapped failed')
else: xprint('_wrapped worked')
"""
==============================================================================================
Expected output
# WITHOUT __add__
$ py3 access_builtins_TEST.py
---------access_builtins_inline_direct----------
sum failed
__add__ worked
+ worked
__wrapped worked
_wrapped failed
----------access_builtins_mixin_direct----------
sum failed
__add__ worked
+ worked
__wrapped failed
_wrapped worked
---------access_builtins_mixin_getattr----------
sum failed
__add__ worked
+ worked
__wrapped worked
_wrapped failed
-----------access_builtins_mixin_desc-----------
sum failed
__add__ worked
+ worked
__wrapped worked
_wrapped failed
# WITH __add__
$ py3 access_builtins_TEST.py
---------access_builtins_inline_direct----------
sum failed
__add__ worked
+ worked
__wrapped worked
_wrapped failed
----------access_builtins_mixin_direct----------
sum failed
__add__ worked
+ worked
__wrapped failed
_wrapped worked
---------access_builtins_mixin_getattr----------
sum failed
__add__ failed
+ failed
__wrapped failed
_wrapped failed
-----------access_builtins_mixin_desc-----------
sum failed
__add__ failed
+ failed
__wrapped failed
_wrapped failed
# NO DECORATOR
$ py3 access_builtins_TEST.py
---------access_builtins_inline_direct----------
sum worked
__add__ worked
+ worked
__wrapped failed
_wrapped failed
----------access_builtins_mixin_direct----------
sum worked
__add__ worked
+ worked
__wrapped failed
_wrapped failed
---------access_builtins_mixin_getattr----------
sum worked
__add__ worked
+ worked
__wrapped failed
_wrapped failed
-----------access_builtins_mixin_desc-----------
sum worked
__add__ worked
+ worked
__wrapped failed
_wrapped failed
==============================================================================================
"""