Making every no-arg method a property?

Chris Angelico rosuav at gmail.com
Tue Aug 5 16:56:11 EDT 2014


On Wed, Aug 6, 2014 at 5:39 AM, Christian Calderon
<calderon.christian760 at gmail.com> wrote:
> I have been using python for 4 years now, and I just started learning ruby.
> I like that in ruby I don't have to type parenthesis at the end of each
> function call if I don't need to provide extra arguments. I just realized
> right now that I can do something similar in python, if I make all methods
> with only the implicitly passed 'self' into properties. Which means I can
> either do some fancy coding and make a metaclass that does this
> auto-magically, or I have to have property decorators all over the place :-P
> . I was wondering what other thought of this, is it an overly fanciful way
> of coding python, or is it an acceptable thing to do in a real project?
> Also, would anyone be interested in helping me make this metaclass?

It's not a Pythonic style of coding. A property is generally assumed
to be a cheap and simple lookup that cannot change anything - that is,
it should be 'safe'. A no-arg method could mutate the object, could be
expensive, could do just about anything. The parentheses make it clear
that something's now happening - code's being called. Properties
should be reserved for those cases where it's conceptually an
attribute lookup, but for whatever reason you need a bit of code on it
- and that's a pretty unusual case, compared to zero-argument methods.

Strong recommendation that you don't do this. Of course, Python's
"consenting adults" policy says that you're most welcome to - but
you'll find that it's much more friendly to subsequent maintainers to
keep attribute lookup and method call different.

ChrisA



More information about the Python-list mailing list