Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #32410

Re: Re: Immutability and Python

Path csiph.com!usenet.pasdenom.info!dedibox.gegeweb.org!gegeweb.eu!nntpfeed.proxad.net!proxad.net!feeder1-2.proxad.net!usenet-fr.net!nerim.net!novso.com!news2.euro.net!newsgate.cistron.nl!newsgate.news.xs4all.nl!post.news.xs4all.nl!not-for-mail
Return-Path <driscoll@cs.wisc.edu>
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; 'python,': 0.02; 'exception': 0.03; 'subject:Python': 0.05; 'overflow': 0.07; '__init__': 0.09; 'mutable': 0.09; 'tuple': 0.09; 'extensions': 0.13; 'stack': 0.15; 'filename:fname piece:signature': 0.16; 'immutability': 0.16; 'namedtuple': 0.16; 'tuple,': 0.16; 'wrote:': 0.17; 'saying': 0.18; 'discussion': 0.20; 'define': 0.20; 'meant': 0.21; 'references': 0.23; 'raise': 0.24; 'header :In-Reply-To:1': 0.25; 'header:User-Agent:1': 0.26; '(which': 0.26; 'guess': 0.27; 'functions.': 0.27; 'really,': 0.29; 'though.': 0.29; 'skip:_ 10': 0.29; 'probably': 0.29; 'classes': 0.30; 'e.g.': 0.30; 'function': 0.30; 'error': 0.30; 'skip:_ 30': 0.32; 'to:addr:python-list': 0.33; 'another': 0.33; "can't": 0.34; 'done': 0.34; 'pm,': 0.35; 'really': 0.36; 'except': 0.36; 'but': 0.36; 'wanted': 0.36; 'anything': 0.36; 'should': 0.36; 'possible': 0.37; 'subject:: ': 0.38; 'some': 0.38; 'sure': 0.38; 'gives': 0.39; 'to:addr:python.org': 0.39; 'short': 0.39; 'think': 0.40; 'your': 0.60; 'places': 0.61; "you'll": 0.62; 'worth': 0.63; 'times': 0.63; 'andrea': 0.84; 'answer:': 0.84; 'played': 0.84; 'hassle': 0.91; 'this;': 0.91
Date Mon, 29 Oct 2012 12:58:58 -0500
From Evan Driscoll <driscoll@cs.wisc.edu>
User-Agent Mozilla/5.0 (X11; Linux x86_64; rv:10.0.8) Gecko/20121012 Thunderbird/10.0.8
MIME-Version 1.0
To python-list@python.org
Subject Re: Re: Immutability and Python
References <CAF_E5Jbf0KJjDLV0jS-p_J9E4D8=_sPScgE+vkmkN2sMw=3aoA@mail.gmail.com> <1793477354.3492917.1351526431192.JavaMail.root@sequans.com> <mailman.3025.1351527152.27098.python-list@python.org> <7x625t6xaj.fsf@ruckus.brouhaha.com> <CAF_E5Ja0TM80-HT9BU46GJOmVue3JZpijVGsC483NdCn4ngU_A@mail.gmail.com>
In-Reply-To <CAF_E5Ja0TM80-HT9BU46GJOmVue3JZpijVGsC483NdCn4ngU_A@mail.gmail.com>
X-Enigmail-Version 1.4
Content-Type multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="------------enigF885F85C80DCE2D4CFBC3B4E"
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 <http://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 <http://mail.python.org/mailman/listinfo/python-list>, <mailto:python-list-request@python.org?subject=subscribe>
Newsgroups comp.lang.python
Message-ID <mailman.3038.1351533554.27098.python-list@python.org> (permalink)
Lines 53
NNTP-Posting-Host 2001:888:2000:d::a6
X-Trace 1351533554 news.xs4all.nl 6927 [2001:888:2000:d::a6]:58088
X-Complaints-To abuse@xs4all.nl
Xref csiph.com comp.lang.python:32410

Show key headers only | View raw


[Multipart message — attachments visible in raw view] - view raw

On 10/29/2012 12:05 PM, andrea crotti wrote:
> I meant how do I create new immutables classes myself, I guess that's
> possible writing C extensions but I don't see in pure Python..

The short answer is: you don't, not really, except by using NamedTuple
if that gives you what you want.

The longer answer:

You can kinda get it somewhat if you define your own
__getattribute__/__setattribute__ functions. __setattribute__ of course
should never do anything except raise an error (one way or another
you'll need to make an exception for your __init__ function of course).
__getattribute__ should make sure no mutable references are returned:
e.g. you'll probably want to make it so someone can't side-step your
setter by saying someobject.__dict__["foo"] = "bar". (I return a copy of
the dict.) It will still be possible to bypass these protections though.

To really get true immutability in pure Python, you'll have to inherit
from tuple or NamedTuple (which inherits from tuple, I think). You can
see some discussion on Stack Overflow and some other places about this;
having played around with this a bit, I think it's not worth the hassle
and have done the __getattribute__/__setattribute__ thing the couple of
times I wanted immutability.

Evan

Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Re: Immutability and Python andrea crotti <andrea.crotti.0@gmail.com> - 2012-10-29 16:12 +0000
  Re: Immutability and Python Paul Rubin <no.email@nospam.invalid> - 2012-10-29 09:46 -0700
    Re: Immutability and Python andrea crotti <andrea.crotti.0@gmail.com> - 2012-10-29 17:05 +0000
      Re: Immutability and Python Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2012-10-29 22:30 +0000
        Re: Immutability and Python Chris Kaynor <ckaynor@zindagigames.com> - 2012-10-29 15:45 -0700
          Re: Immutability and Python Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2012-10-29 23:14 +0000
    Re: Re: Immutability and Python Evan Driscoll <driscoll@cs.wisc.edu> - 2012-10-29 12:58 -0500
    Re: Immutability and Python Terry Reedy <tjreedy@udel.edu> - 2012-10-29 14:03 -0400
    Re: Immutability and Python Devin Jeanpierre <jeanpierreda@gmail.com> - 2012-10-29 14:25 -0400

csiph-web