@@ -136,12 +136,14 @@ void CCachedProperty::__set_name__(object owner, str name)
136136 m_name = name;
137137}
138138
139- object CCachedProperty::__get__ (object instance, object owner=object())
139+ object CCachedProperty::__get__ (object self, object instance, object owner=object())
140140{
141+ CCachedProperty &pSelf = extract<CCachedProperty &>(self);
141142 if (instance.is_none ())
142- return object ( ptr ( this )) ;
143+ return self ;
143144
144- if (m_name.is_none ())
145+ object name = pSelf.get_name ();
146+ if (name.is_none ())
145147 BOOST_RAISE_EXCEPTION (
146148 PyExc_AttributeError,
147149 " Unable to retrieve the value of an unbound property."
@@ -151,7 +153,7 @@ object CCachedProperty::__get__(object instance, object owner=object())
151153
152154 try
153155 {
154- return cache[m_name ];
156+ return cache[name ];
155157 }
156158 catch (...)
157159 {
@@ -160,21 +162,22 @@ object CCachedProperty::__get__(object instance, object owner=object())
160162
161163 PyErr_Clear ();
162164
163- if (m_fget.is_none ())
165+ object getter = pSelf.get_getter ();
166+ if (getter.is_none ())
164167 BOOST_RAISE_EXCEPTION (
165168 PyExc_AttributeError,
166169 " Unable to retrieve the value of a property that have no getter function."
167170 );
168171
169- cache[m_name ] = _prepare_value (
170- m_fget (
171- *(make_tuple (handle<>(borrowed (instance.ptr ()))) + m_args),
172- **m_kwargs
172+ cache[name ] = pSelf. _prepare_value (
173+ getter (
174+ *(make_tuple (handle<>(borrowed (instance.ptr ()))) + pSelf. m_args ),
175+ **pSelf. m_kwargs
173176 )
174177 );
175178 }
176179
177- return cache[m_name ];
180+ return cache[name ];
178181}
179182
180183
@@ -210,10 +213,11 @@ void CCachedProperty::__delete__(object instance)
210213 cache[m_name].del ();
211214}
212215
213- object CCachedProperty::__call__ (object fget)
216+ object CCachedProperty::__call__ (object self, object fget)
214217{
215- m_fget = _callable_check (fget, " getter" );
216- return object (ptr (this ));
218+ CCachedProperty &pSelf = extract<CCachedProperty &>(self);
219+ pSelf.set_getter (fget);
220+ return self;
217221}
218222
219223object CCachedProperty::__getitem__ (str item)
0 commit comments