Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Python (http://www.velocityreviews.com/forums/f43-python.html)
-   -   Re: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/205183idiom (http://www.velocityreviews.com/forums/t599745-re-http-aspn-activestate-com-aspn-cookbook-python-recipe-205183idiom.html)

Gabriel Rossetti 03-18-2008 09:55 AM

Re: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/205183idiom
 
Carsten Haese wrote:
> On Tue, 2008-03-18 at 09:06 +0100, Gabriel Rossetti wrote:
>
>> Hello,
>>
>> I am reading core python python programming and it talks about using the
>> idiom
>> described on
>> http://aspn.activestate.com/ASPN/Coo.../Recipe/205183 .
>>
>> I'm using python 2.5.1 and if I try :
>>
>> class MyClass(object):
>> def __init__(self):
>> self._foo = "foo"
>> self._bar = "bar"
>>
>> @property
>> def foo():
>> doc = "property foo's doc string"
>> def fget(self):
>> return self._foo
>> def fset(self, value):
>> self._foo = value
>> def fdel(self):
>> del self._foo
>> return locals() # credit: David Niergarth
>>
>> @property
>> def bar():
>> doc = "bar is readonly"
>> def fget(self):
>> return self._bar
>> return locals()
>>
>> like suggested in the book (the decorator usage) I get this :
>>
>> >>> a=MyClass()
>> >>> a.foo

>> Traceback (most recent call last):
>> File "<stdin>", line 1, in <module>
>> TypeError: foo() takes no arguments (1 given)
>>
>> but if I write it just like on the web page (without the decorator, using "x = property(**x())" instead) it works :
>>
>> >>> a = MyClass()
>> >>> a.foo

>> 'foo'
>>
>> does anyone have an idea as of why this is happening?
>>

>
> You're mixing two completely different approaches of building a
> property. If that code is actually in the book like that, that's a typo
> that you should mention to the author.
>
> The @property decorator can only be used to turn a single getter
> function into a read-only attribute, because this:
>
> @property
> def foo(...):
> ...
>
> is the same as this:
>
> def foo(...):
> ...
> foo = property(foo)
>
> and calling property() with one argument builds a property that has just
> a getter function that is the single argument you're giving it.
>
> The recipe you're referring to uses a magical function that returns a
> dictionary of getter function, setter function, deleter function, and
> docstring, with suitable key names so that the dictionary can be passed
> as a keyword argument dictionary into the property() constructor.
> However, that requires the magical foo=property(**foo()) invocation, not
> the regular decorator invocation foo=property(foo).
>
> HTH,
>
>

Ah, ok, I'll send him an email then, thanks for the explanation!

Gabriel

wesley chun 03-19-2008 04:26 AM

Re: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/205183idiom
 
> > You're mixing two completely different approaches of building a
> > property. If that code is actually in the book like that, that's a typo
> > that you should mention to the author.
> > :
> > The recipe you're referring to uses a magical function that returns a
> > dictionary of getter function, setter function, deleter function, and
> > docstring, with suitable key names so that the dictionary can be passed
> > as a keyword argument dictionary into the property() constructor.
> > However, that requires the magical foo=property(**foo()) invocation, not
> > the regular decorator invocation foo=property(foo).

>
> Ah, ok, I'll send him an email then, thanks for the explanation!



this well-known error was discovered pretty early... apologies to all
readers. please checkout the Errata at the book's website --
http://corepython.com -- and keep it as a companion in case you find
anything else like this. i appreciate all constructive feedback...
don't trust everything you read! send any other corrections to me at
corepython at yahoo... including suggestions for future editions,
ideas for exercises, new material that you think should be covered,
etc.

best regards,
-- wesley

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
"Core Python Programming", Prentice Hall, (c)2007,2001
http://corepython.com

wesley.j.chun :: wescpy-at-gmail.com
python training and technical consulting
cyberweb.consulting : silicon valley, ca
http://cyberwebconsulting.com


All times are GMT. The time now is 04:53 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.