Path: csiph.com!newsfeed.hal-mli.net!feeder3.hal-mli.net!news.stack.nl!newsfeed.xs4all.nl!newsfeed3a.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.006 X-Spam-Evidence: '*H*': 0.99; '*S*': 0.00; 'python.': 0.02; 'true,': 0.05; 'assign': 0.07; 'float': 0.07; 'url:activestate': 0.09; 'cc:addr:python-list': 0.11; 'python': 0.11; 'c-level': 0.16; 'fiddle': 0.16; 'foo()': 0.16; 'from:addr:rosuav': 0.16; 'from:name:chris angelico': 0.16; 'it".': 0.16; 'exception': 0.16; 'language': 0.16; 'wrote:': 0.18; "python's": 0.19; '>>>': 0.22; 'memory': 0.22; 'cc:addr:python.org': 0.22; 'cc:2**0': 0.24; 'class.': 0.26; 'long,': 0.26; 'shown': 0.26; 'header:In-Reply- To:1': 0.27; 'specifically': 0.29; 'chris': 0.29; 'feature': 0.29; 'am,': 0.29; 'url:code': 0.29; 'message-id:@mail.gmail.com': 0.30; "i'm": 0.30; 'code': 0.31; "d'aprano": 0.31; 'steven': 0.31; 'types.': 0.31; 'fri,': 0.33; 'something': 0.35; 'but': 0.35; 'received:google.com': 0.35; 'instances': 0.36; 'possible': 0.36; 'clear': 0.37; 'pm,': 0.38; 'rather': 0.38; 'changed': 0.39; 'how': 0.40; 'around.': 0.60; 'back': 0.62; 'different': 0.65; 'within': 0.65; 'real-world': 0.68; 'subject:This': 0.74; '3.4': 0.84; '9:02': 0.84; 'limits,': 0.84; 'win32:': 0.84; 'to:none': 0.92 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; bh=CL498L66k++oLIG34nlwt6EOcXW9U6SrVRrCwOfTokM=; b=q81KJ87k4/r1y2bxbEAgaQTRXNerZY/e0tWM8Un1LqTJ66pwrveiS0lyvThf3nEdKH dGjAtcYjJjHC7h04gu+ZhYZf3765u0LM4BU2vRJv9Bpd8TkLOllDFLUBPV68KEBgfSp2 TFLKbc4B1Qtf+It27P58p5cWwR7gxak7ChY9FHmSP4eyJi3ZaB9kLOl+YHNMvqDDwSQC BcJ3FXUymxlCMKJ07u3By3IIy957bx82J50thQ5EMLZOzTQZwIlulcEnDj32/AtHEld7 sQ2J0Xlb6emWno9SboCm093OqIuS/HFGHaRIDcfQEibyJDf0+mJO5GRdZwdgE7GYEEFf LIxw== MIME-Version: 1.0 X-Received: by 10.220.92.135 with SMTP id r7mr1687533vcm.11.1402025247469; Thu, 05 Jun 2014 20:27:27 -0700 (PDT) In-Reply-To: <53913292$0$29978$c3e8da3$5496439d@news.astraweb.com> References: <87tx7zi0i1.fsf@dpt-info.u-strasbg.fr> <252650940423701065.252693sturla.molden-gmail.com@news.gmane.org> <53913292$0$29978$c3e8da3$5496439d@news.astraweb.com> Date: Fri, 6 Jun 2014 13:27:27 +1000 Subject: Re: OT: This Swift thing From: Chris Angelico Cc: "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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 39 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1402025249 news.xs4all.nl 2858 [2001:888:2000:d::a6]:43383 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:72815 On Fri, Jun 6, 2014 at 1:16 PM, Steven D'Aprano wrote: > On Fri, 06 Jun 2014 09:21:26 +1000, Chris Angelico wrote: > >> On Fri, Jun 6, 2014 at 9:02 AM, Sturla Molden >> wrote: >>> You cannot spoof the type of an object in Python. >> >> Not without fiddling around. Python 3.4 on win32: > [...] >>>>> x = Foo() >>>>> x.spam() >> <__main__.Foo object at 0x0169AB10> spams >>>>> x.__class__ = Bar >>>>> x.spam() >> <__main__.Bar object at 0x0169AB10> eats spam >> >> The thing has the same id (as shown in its repr), but has changed class. > > That's not spoofing types. That is a language feature: within limits, > instances can change their type. It has been around for a long, long > time, back to Python 1.5 or older, and it has real-world use-cases: > > http://code.activestate.com/recipes/68429-ring-buffer/ True, it's not *spoofing*, in the same way that this C code is: float x = 3.14159; int y = *(int *)&x; And I'm aware that it's a language feature (why else would it be specifically limited with a clear exception when you try to assign something you can't?). So's the C-level fiddling, albeit for different reasons and in different ways. Anyway, I was broadly agreeing - Python's type system is "objects have types", rather than "stuff is in memory and data types are just how you look at it". It just happens to be possible to fiddle if you want to :) ChrisA