summaryrefslogtreecommitdiffstatshomepage
path: root/tests/basics/class_delattr_setattr.py
diff options
context:
space:
mode:
authorYonatan Goldschmidt <yon.goldschmidt@gmail.com>2019-12-09 18:31:35 +0200
committerDamien George <damien.p.george@gmail.com>2019-12-21 00:12:08 +1100
commit07ccb5588c4abcffa28f25907e699d1727d38bae (patch)
treeb3a198c7bc563df81bdfd2b6b55c6a589cb9c8df /tests/basics/class_delattr_setattr.py
parent90f286465b670feb94c3ce8857c81bad3df18b96 (diff)
downloadmicropython-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.py26
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")