summaryrefslogtreecommitdiffstatshomepage
path: root/tests/basics/builtin_property.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/basics/builtin_property.py')
-rw-r--r--tests/basics/builtin_property.py78
1 files changed, 78 insertions, 0 deletions
diff --git a/tests/basics/builtin_property.py b/tests/basics/builtin_property.py
new file mode 100644
index 0000000000..4df9842a3e
--- /dev/null
+++ b/tests/basics/builtin_property.py
@@ -0,0 +1,78 @@
+# test builtin property
+
+# create a property object explicitly
+property()
+property(1, 2, 3)
+
+# use its accessor methods
+p = property()
+p.getter(1)
+p.setter(2)
+p.deleter(3)
+
+# basic use as a decorator
+class A:
+ def __init__(self, x):
+ self._x = x
+
+ @property
+ def x(self):
+ print("x get")
+ return self._x
+
+a = A(1)
+print(a.x)
+
+try:
+ a.x = 2
+except AttributeError:
+ print("AttributeError")
+
+# explicit use within a class
+class B:
+ def __init__(self, x):
+ self._x = x
+
+ def xget(self):
+ print("x get")
+ return self._x
+
+ def xset(self, value):
+ print("x set")
+ self._x = value
+
+ def xdel(self):
+ print("x del")
+
+ x = property(xget, xset, xdel)
+
+b = B(3)
+print(b.x)
+b.x = 4
+print(b.x)
+del b.x
+
+# full use as a decorator
+class C:
+ def __init__(self, x):
+ self._x = x
+
+ @property
+ def x(self):
+ print("x get")
+ return self._x
+
+ @x.setter
+ def x(self, value):
+ print("x set")
+ self._x = value
+
+ @x.deleter
+ def x(self):
+ print("x del")
+
+c = C(5)
+print(c.x)
+c.x = 6
+print(c.x)
+del c.x