1# mode: run
2# ticket: 264
3# tag: property, decorator
4
5my_property = property
6
7cdef class Prop:
8    """
9    >>> p = Prop()
10    >>> p.prop
11    GETTING 'None'
12    >>> p.prop = 1
13    SETTING '1' (previously: 'None')
14    >>> p.prop
15    GETTING '1'
16    1
17    >>> p.prop = 2
18    SETTING '2' (previously: '1')
19    >>> p.prop
20    GETTING '2'
21    2
22    >>> p.my_prop
23    GETTING '2' via my_prop
24    2
25    >>> del p.prop
26    DELETING '2'
27    >>> p.prop
28    GETTING 'None'
29    >>> list(p.generator_prop)
30    [42]
31    """
32    cdef _value
33    def __init__(self):
34        self._value = None
35
36    @property
37    def prop(self):
38        print("FAIL")
39        return 0
40
41    @prop.getter
42    def prop(self):
43        print("FAIL")
44
45    @property
46    def prop(self):
47        print("GETTING '%s'" % self._value)
48        return self._value
49
50    @prop.setter
51    def prop(self, value):
52        print("SETTING '%s' (previously: '%s')" % (value, self._value))
53        self._value = value
54
55    @prop.deleter
56    def prop(self):
57        print("DELETING '%s'" % self._value)
58        self._value = None
59
60    @my_property
61    def my_prop(self):
62        print("GETTING '%s' via my_prop" % self._value)
63        return self._value
64
65    @property
66    def generator_prop(self):
67        yield 42
68