| import python_nondynamic |
| |
| def debug_print(s): |
| show_debug = False |
| if show_debug: |
| print(s) |
| |
| aa = python_nondynamic.A() |
| |
| aa.a = 1 |
| aa.b = 2 |
| |
| # Check values are really set |
| if python_nondynamic.retrieve_A_a(aa) != 1: raise RuntimeError("a not set correctly") |
| if python_nondynamic.retrieve_A_b(aa) != 2: raise RuntimeError("b not set correctly") |
| |
| try: |
| aa.c = 2 |
| raise RuntimeError("A is not static") |
| except AttributeError as e: |
| debug_print(e) |
| pass |
| |
| class PurePythonClass(object): |
| def __init__(self): |
| self.variables = dict() |
| def __set__(self, name, value): |
| self.variables[name] = value |
| pass |
| |
| class B(python_nondynamic.A): |
| c = 4 |
| cc = PurePythonClass() |
| cc.nnn = "new attrib" |
| |
| def __init__(self): |
| python_nondynamic.A.__init__(self) |
| pass |
| pass |
| |
| bb = B() |
| bb.a = 4 |
| bb.b = 5 |
| # Check values are really set |
| if python_nondynamic.retrieve_A_a(bb) != 4: raise RuntimeError("a not set correctly") |
| if python_nondynamic.retrieve_A_b(bb) != 5: raise RuntimeError("b not set correctly") |
| |
| try: |
| bb.c = 3 |
| raise RuntimeError("B.c class variable messes up nondynamic-ness of B bb.c={} B.c={}".format(bb.c, B.c)) |
| except AttributeError as e: |
| debug_print(e) |
| pass |
| |
| try: |
| bb.d = 2 |
| raise RuntimeError("B is not static") |
| except AttributeError as e: |
| debug_print(e) |
| pass |
| |
| cc = python_nondynamic.C() |
| cc.d = 3 |
| |
| # An inconsistency between builtin and non-builtin. |
| # Class variables cannot be set on builtin types, like other Python builtins, eg list.classvar=111 fails |
| if python_nondynamic.is_python_builtin(): |
| try: |
| python_nondynamic.C.classvar = 111 |
| raise RuntimeError("C should not allow static variables to be added when using builtin") |
| except AttributeError as e: |
| debug_print(e) |
| pass |
| else: |
| python_nondynamic.C.classvar = 111 |
| |
| if not python_nondynamic.is_python_builtin(): |
| # Not working with builtin :( |
| try: |
| B.a = 10 |
| raise RuntimeError("B should not allow adding a class variable by setting it as an instance variable") |
| except AttributeError as e: |
| debug_print(e) |
| pass |
| |
| try: |
| python_nondynamic.A.a = 10 |
| raise RuntimeError("A should not allow adding a class variable by setting it as an instance variable") |
| except AttributeError as e: |
| debug_print(e) |
| pass |
| |
| if not python_nondynamic.is_python_builtin(): |
| try: |
| bb.cc = 3 |
| raise RuntimeError("B.cc class variable messes up nondynamic-ness of B bb.cc={} B.cc={}".format(bb.cc, B.cc)) |
| except AttributeError as e: |
| debug_print(e) |
| pass |
| |