Path: csiph.com!usenet.pasdenom.info!weretis.net!feeder1.news.weretis.net!feeder.erje.net!1.eu.feeder.erje.net!newsfeed.xs4all.nl!newsfeed2b.news.xs4all.nl!xs4all!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.014 X-Spam-Evidence: '*H*': 0.97; '*S*': 0.00; '16,': 0.03; 'attributes': 0.07; "object's": 0.09; 'cc:addr:python-list': 0.10; 'interpreter': 0.15; 'attribute,': 0.16; 'from:addr:rosuav': 0.16; 'from:name:chris angelico': 0.16; 'itself).': 0.16; 'surprising': 0.16; 'wrote:': 0.16; 'attribute': 0.18; 'module,': 0.18; 'odd': 0.18; 'work,': 0.21; 'cc:2**0': 0.21; 'cc:addr:python.org': 0.21; 'meant': 0.22; "aren't": 0.22; 'class,': 0.22; 'referring': 0.22; 'am,': 0.23; 'code.': 0.23; 'defined': 0.23; '2015': 0.23; 'module': 0.23; 'normally': 0.23; 'unlike': 0.23; "i've": 0.24; 'seems': 0.24; 'header:In-Reply-To:1': 0.24; 'chris': 0.26; 'message-id:@mail.gmail.com': 0.28; "i'm": 0.29; 'mind,': 0.29; 'sense': 0.29; 'function': 0.30; 'code': 0.31; 'usually': 0.33; 'belong': 0.33; "d'aprano": 0.33; 'steven': 0.33; 'surprised': 0.33; 'subject:?': 0.34; 'received:google.com': 0.34; 'changed': 0.35; 'wrong': 0.35; 'false': 0.35; 'instance': 0.35; 'but': 0.36; 'being': 0.36; 'created': 0.36; 'should': 0.37; 'setting': 0.37; 'subject:: ': 0.37; 'tue,': 0.38; 'does': 0.39; 'subject:the': 0.40; 'easy': 0.60; 'your': 0.60; 'simple': 0.61; 'skip:u 10': 0.62; 'within': 0.64; 'different': 0.64; 'direct': 0.70; 'obvious': 0.72; '(they': 0.84; 'assertion.': 0.84; 'chrisa': 0.84; 'to:none': 0.90; 'subject:Set': 0.91 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:cc :content-type:content-transfer-encoding; bh=S1CkBtwEM+5KY/4Peihc2qcADZ8c4fijHgqrXLQdjCQ=; b=TugHQa/GkjtN7c8qCqkL2//0aXlxG/TynzsBUyWaXjuOFatXpJarqrypgW6+k4NQI0 4OI9cPgsYylRnqsWQXJ7FjFWzXuO5+ymgueIEgtzkD4m1Xm92JPNt3a6RZ33KuhgV9Iz bSydN33BXtrciBoqERzvYjxSbni97+3UC5KBZVDI3LG3cezIYHY8aZ187LRhaxHcwlXG M+WQTXP1rHQjv4siXZna/y+3ys6X+c5X4c6J3sVujNO8RkVtaJxwOkJWaHAZjIAP59y2 /iuA/4gx5ez8OpYyo8xPooy7S0sw7Yd2VZkMK16mGrZrwD3nAdOPMdkCvlNw81iYc9J4 eWPw== MIME-Version: 1.0 X-Received: by 10.107.160.141 with SMTP id j135mr38488328ioe.43.1434414761369; Mon, 15 Jun 2015 17:32:41 -0700 (PDT) In-Reply-To: <85oakgtsfd.fsf@benfinney.id.au> References: <557f6676$0$21718$c3e8da3@news.astraweb.com> <85oakgtsfd.fsf@benfinney.id.au> Date: Tue, 16 Jun 2015 10:32:41 +1000 Subject: Re: Set a flag on the function or a global? From: Chris Angelico Cc: "python-list@python.org" Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.20+ Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 32 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1434414769 news.xs4all.nl 2969 [2001:888:2000:d::a6]:37437 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:92651 On Tue, Jun 16, 2015 at 10:20 AM, Ben Finney w= rote: > Chris Angelico writes: > >> On Tue, Jun 16, 2015 at 9:57 AM, Steven D'Aprano >> wrote: >> > I can use a flag set on the function object itself: >> > >> > edir.dunders =3D False >> >> For most situations, the last one is extremely surprising - attributes >> on functions aren't normally meant to be changed by outside callers, >> it always feels wrong (they belong to the function itself). > > I'm surprised by your assertion. To my mind, outside callers get simple > and direct access to the attribute, whereas the code of the function > itself does not have such easy access; unlike =E2=80=98self=E2=80=99 for = the current > instance of a class, there's no obvious name to use for referring to the > function object within the function object's own code. > > In what sense do they =E2=80=9Cbelong to=E2=80=9D the function itself *mo= re than* to > outside callers? Custom function attributes (as in, those not set by the interpreter itself) are pretty rare, but I've usually seen them only being defined by the module that created them. Setting that kind of attribute externally, from a different module, seems odd - and undiscoverable. But for interactive work, that should be fine. ChrisA