Path: csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail From: Antoon Pardon Newsgroups: comp.lang.python Subject: Re: Case Statements Date: Thu, 17 Mar 2016 09:36:47 +0100 Lines: 42 Message-ID: References: <30502a2e-0bad-4b0f-a1e8-a2b40b0d7ab9@googlegroups.com> <56E928D4.3000701@rece.vub.ac.be> <56E93ADD.9040500@rece.vub.ac.be> <56E961C9.7040008@rece.vub.ac.be> <56E97B60.3060402@rece.vub.ac.be> <56E9A66E.4030905@rece.vub.ac.be> <56e9f7f9$0$1597$c3e8da3$5496439d@news.astraweb.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Trace: news.uni-berlin.de y8CWoSJ2oRLV5/SfaC2EYgy0TPBDh8G8qGLgbryMWNLQ== Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.005 X-Spam-Evidence: '*H*': 0.99; '*S*': 0.00; 'received:134': 0.05; 'feature.': 0.07; 'line:': 0.07; 'so?': 0.07; 'messing': 0.09; 'python': 0.10; 'syntax': 0.13; 'thu,': 0.15; '11:19': 0.16; '2016': 0.16; 'general.': 0.16; 'really?': 0.16; 'received:ac.be': 0.16; 'received:io': 0.16; 'received:psf.io': 0.16; 'rewriting': 0.16; 'sugar': 0.16; 'syntactic': 0.16; 'wrote:': 0.16; "wouldn't": 0.16; 'implementing': 0.18; '>>>': 0.20; 'work,': 0.21; 'decorator': 0.22; 'features,': 0.22; 'names.': 0.22; 'referring': 0.22; 'am,': 0.23; 'header:In-Reply-To:1': 0.24; 'header:User-Agent:1': 0.26; "doesn't": 0.26; 'example': 0.26; 'chris': 0.26; 'received:be': 0.30; "can't": 0.32; 'run': 0.33; 'class': 0.33; 'accessible': 0.33; "d'aprano": 0.33; 'decorators': 0.33; 'foo': 0.33; 'steven': 0.33; 'previous': 0.34; 'add': 0.34; 'gets': 0.35; 'but': 0.36; 'depends': 0.36; 'to:addr:python-list': 0.36; 'subject:: ': 0.37; 'being': 0.37; "won't": 0.38; 'means': 0.39; 'to:addr:python.org': 0.40; 'still': 0.40; 'avoid': 0.61; 'provide': 0.61; 'back': 0.62; 'for:': 0.64; 'other.': 0.64; 'mar': 0.65; 'detail.': 0.66; 'angelico:': 0.84; 'decorator.': 0.84; 'decorators.': 0.84; 'decorators:': 0.84; 'pardon': 0.84; 'schreef': 0.84 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AugKAMpr6laGuA9G/2dsb2JhbABehGEBJbwFhg0CggABAQEBAQFlhGkBAQQjVRELGAICBRYLAgIJAwIBAgFFEAMGAgKII7Bwi0yDeQEBCAIefIUihESFCII0gToFjTqKGIFQjDGJI4VijwJig2ZpAYpiAQEB User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Icedove/38.5.0 In-Reply-To: X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Xref: csiph.com comp.lang.python:105075 Op 17-03-16 om 01:31 schreef Chris Angelico: > On Thu, Mar 17, 2016 at 11:19 AM, Steven D'Aprano wrote: >> On Thu, 17 Mar 2016 10:14 am, Chris Angelico wrote: >> >>> On Thu, Mar 17, 2016 at 5:31 AM, Antoon Pardon >>> wrote: >>>> It can be yes. Look at decorators. They don't provide functionality >>>> we wouldn't have without them. >>> Really? Okay, try implementing this without decorators: >> [...] >>> @monkeypatch >>> class Foo: >> [...] >> >> >> I think Antoon is referring to decorator *syntax*, not the concept of >> decorators in general. Decorator syntax is just syntactic sugar for: >> >> >> class Foo: >> ... >> >> Foo = monkeypatch(Foo) >> >> which has been valid all the way back to Python 1.0. >> > Yes... in theory. But try rewriting my example to avoid decorator > syntax. It won't work, because of this line: > > orig = globals()[cls.__name__] > > It depends on the decorator being run before the name actually gets > bound - which means the previous class is available to the decorator. > You can't do that without decorator syntax, or messing around with > multiple names. So? That is an implementation detail. With a new features, functionality can now be accessible in a way it was not before the feature. It still doesn't add new functionality, which in this case was just transferring methods from one class to an other.