Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #75761
| Path | csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!feeder.erje.net!eu.feeder.erje.net!newsfeed.xs4all.nl!newsfeed3a.news.xs4all.nl!xs4all!post.news.xs4all.nl!not-for-mail |
|---|---|
| Return-Path | <ian.g.kelly@gmail.com> |
| X-Original-To | python-list@python.org |
| Delivered-To | python-list@mail.python.org |
| X-Spam-Status | OK 0.003 |
| X-Spam-Evidence | '*H*': 0.99; '*S*': 0.00; 'python,': 0.02; '(except': 0.07; 'arguments': 0.09; 'arguments,': 0.09; 'subject:method': 0.09; 'python': 0.11; 'def': 0.12; 'thread': 0.14; ':-p': 0.16; 'bases,': 0.16; 'descriptor': 0.16; 'fancy': 0.16; 'metaclass': 0.16; 'optional': 0.16; 'parentheses': 0.16; 'wrote:': 0.18; 'not,': 0.20; 'import': 0.22; 'aug': 0.22; 'coding': 0.22; 'decorators': 0.24; 'replace': 0.24; 'pass': 0.26; 'required.': 0.27; 'header:In-Reply-To:1': 0.27; 'function': 0.29; 'wondering': 0.29; "doesn't": 0.30; 'message-id:@mail.gmail.com': 0.30; 'skip:( 20': 0.30; "i'm": 0.30; 'consequence': 0.31; 'inspect': 0.31; 'project?': 0.31; 'anyone': 0.31; 'class': 0.32; 'not.': 0.33; 'skip:_ 10': 0.34; 'something': 0.35; 'but': 0.35; 'received:google.com': 0.35; 'really': 0.36; 'acceptable': 0.36; 'returning': 0.36; 'method': 0.36; 'subject:?': 0.36; 'similar': 0.36; 'christian': 0.38; 'to:addr:python-list': 0.38; 'pm,': 0.38; 'does': 0.39; 'to:addr:python.org': 0.39; 'either': 0.39; 'called': 0.40; 'above,': 0.60; 'real': 0.63; 'skip:n 10': 0.64; 'provide': 0.64; 'realized': 0.68; 'helping': 0.70; 'subject:Making': 0.84 |
| DKIM-Signature | v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :content-type; bh=IpNmz5atI7whPaCtEr6OdR6DMnRtBsa3McWvXohJoSM=; b=hgRAq99xQYIdDmRY79UUUtrJcPxPCe7v+Ft9xvfz7I0/og2tGcrhxXT8WzyH6MlBe8 mQjIQcWRg+MiikXiViRhVc2W+FpVC3OSxdBaPBP196S6Krc52tNkKbKkCfWEsC9IV9wk PC0QtfwhrOM+UAviLSaQFTRrQMASfjTNJ/aAAcNFaz8iGZP75UBpqbOVhW/41VR9Q5R6 pJuC7+Aw8pLxBciYkMZu8pqgO5muuKxhgtL5EQ13IZY8kZvTgeCzABLMaeuul2O98OfN J919hHKRdoxDOBfqqVcOm+SyM3JA6x2U/yHpQJ/dqRJVqiLYLPLigr3P8VlgqGfl1kue d29g== |
| X-Received | by 10.70.108.164 with SMTP id hl4mr7341158pdb.70.1407275654414; Tue, 05 Aug 2014 14:54:14 -0700 (PDT) |
| MIME-Version | 1.0 |
| In-Reply-To | <CA+9L8FypV3+D1cMTca7Dmwju6UB_myDtMUGukpY1fGGZLcbLGQ@mail.gmail.com> |
| References | <CA+9L8FypV3+D1cMTca7Dmwju6UB_myDtMUGukpY1fGGZLcbLGQ@mail.gmail.com> |
| From | Ian Kelly <ian.g.kelly@gmail.com> |
| Date | Tue, 5 Aug 2014 15:53:34 -0600 |
| Subject | Re: Making every no-arg method a property? |
| To | Python <python-list@python.org> |
| Content-Type | text/plain; charset=UTF-8 |
| X-BeenThere | python-list@python.org |
| X-Mailman-Version | 2.1.15 |
| Precedence | list |
| List-Id | General discussion list for the Python programming language <python-list.python.org> |
| List-Unsubscribe | <https://mail.python.org/mailman/options/python-list>, <mailto:python-list-request@python.org?subject=unsubscribe> |
| List-Archive | <http://mail.python.org/pipermail/python-list/> |
| List-Post | <mailto:python-list@python.org> |
| List-Help | <mailto:python-list-request@python.org?subject=help> |
| List-Subscribe | <https://mail.python.org/mailman/listinfo/python-list>, <mailto:python-list-request@python.org?subject=subscribe> |
| Newsgroups | comp.lang.python |
| Message-ID | <mailman.12678.1407275663.18130.python-list@python.org> (permalink) |
| Lines | 41 |
| NNTP-Posting-Host | 2001:888:2000:d::a6 |
| X-Trace | 1407275663 news.xs4all.nl 2861 [2001:888:2000:d::a6]:60387 |
| X-Complaints-To | abuse@xs4all.nl |
| Xref | csiph.com comp.lang.python:75761 |
Show key headers only | View raw
On Tue, Aug 5, 2014 at 1:39 PM, Christian Calderon
<calderon.christian760@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?
The metaclass to do this is easy:
import inspect
import types
class autoprop(type):
def __init__(cls, name, bases, attrs):
for name, value in attrs.items():
if (name.startswith('__') and name.endswith('__')
or not isinstance(value, types.FunctionType)):
continue
argspec = inspect.getfullargspec(value)
if (len(argspec.args) == 1
and not any([argspec.varargs, argspec.varkw, argspec.kwonlyargs])):
setattr(cls, name, property(value))
But I'm in agreement with the others in this thread that it's not
really a good idea. In addition to the arguments made by others, note
that this doesn't actually make the parentheses optional; it makes
their absence required. That's a fundamental limitation, because it's
up to the descriptor to automatically call the method or not, and the
descriptor has no way of knowing whether the thing it's returning is
about to be called or not.
Also, as a consequence of the above, note that this only works for
methods that take no arguments at all (except self). If the method has
optional arguments, and you replace it with a property, then you no
longer have any way to pass those optional arguments.
Back to comp.lang.python | Previous | Next | Find similar | Unroll thread
Re: Making every no-arg method a property? Ian Kelly <ian.g.kelly@gmail.com> - 2014-08-05 15:53 -0600
csiph-web