diff options
author | Yonatan Goldschmidt <yon.goldschmidt@gmail.com> | 2019-12-09 18:31:35 +0200 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2019-12-21 00:12:08 +1100 |
commit | 07ccb5588c4abcffa28f25907e699d1727d38bae (patch) | |
tree | b3a198c7bc563df81bdfd2b6b55c6a589cb9c8df /tests/basics/class_delattr_setattr.py | |
parent | 90f286465b670feb94c3ce8857c81bad3df18b96 (diff) | |
download | micropython-07ccb5588c4abcffa28f25907e699d1727d38bae.tar.gz micropython-07ccb5588c4abcffa28f25907e699d1727d38bae.zip |
py/objobject: Add object.__setattr__ function.
Allows assigning attributes on class instances that implement their own
__setattr__. Both object.__setattr__ and super(A, b).__setattr__ will work
with this commit.
Diffstat (limited to 'tests/basics/class_delattr_setattr.py')
-rw-r--r-- | tests/basics/class_delattr_setattr.py | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/tests/basics/class_delattr_setattr.py b/tests/basics/class_delattr_setattr.py index 190b4875b9..8fe1bb6fc1 100644 --- a/tests/basics/class_delattr_setattr.py +++ b/tests/basics/class_delattr_setattr.py @@ -60,3 +60,29 @@ try: print(a.a) except AttributeError: print("AttributeError") + +# test object.__setattr__ +class C: + def __init__(self): + pass + + def __setattr__(self, attr, value): + print(attr, "=", value) + +c = C() +c.a = 5 +try: + print(c.a) +except AttributeError: + print("AttributeError") + +object.__setattr__(c, "a", 5) +super(C, c).__setattr__("b", 6) +print(c.a) +print(c.b) + +try: + # attribute name must be string + object.__setattr__(c, 5, 5) +except TypeError: + print("TypeError") |