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