At 06:15 PM 4/3/04 +0200, Martin v. Löwis wrote: >Guido van Rossum wrote: >>I'm still torn whether to promote defining properties this way: >> [propget] >> def x(self): >> "Doc string for x" >> return self.__x >> [propset] >> def x(self, newx): >> self.__x = newx >> [propdel] >> def x(self): >> del self.__x >>but if people like this (whatever the decorator syntax :) we might as >>well make this the recommended way to define properties. > >Does that actually work? I.e. is there an implementation of propget, >propset, propdel so that this code introduces a property x? Yes, using sys._getframe().f_locals[function.func_name]. Someone posted a link to an implementation earlier this week. >My understanding is that above syntax would be short for> [propget] > def x(self): > "Doc string for x" > return self.__x > x = propget(x) > > def x(self, newx): > self.__x = newx > x = propset(x) > > def x(self): > del self.__x > x = propdel(x) > >Later assignments to x would override earlier ones, so that only >the propdel survives. Technically, what you show is not the actual expansion of the new syntax. The new syntax applies decorators before binding 'x' to the new function. So, the old value of 'x' is available to a decorator via sys._getframe().f_locals. This technique is also useful for implementing generic functions and/or multimethods, signature-based overloading, etc.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4