A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://mail.python.org/pipermail/python-dev/2004-April/043984.html below:

[Python-Dev] PEP 318: Properties

[Python-Dev] PEP 318: PropertiesPhillip J. Eby pje at telecommunity.com
Sat Apr 3 11:32:45 EST 2004
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.


More information about the Python-Dev mailing list

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