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

==============================================================================================
"""



[Home page] Books Code Blog Python Author Train Find ©M.Lutz