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


Groups > comp.lang.python > #50278

Re: Recursive class | can you modify self directly?

References <61751485-a298-403e-8b44-be7cf2504f0e@googlegroups.com>
From Ian Kelly <ian.g.kelly@gmail.com>
Date 2013-07-09 16:18 -0600
Subject Re: Recursive class | can you modify self directly?
Newsgroups comp.lang.python
Message-ID <mailman.4475.1373408331.3114.python-list@python.org> (permalink)

Show all headers | View raw


On Tue, Jul 9, 2013 at 4:01 PM, Russel Walker <russ.pobox@gmail.com> wrote:
> Sorry for the vague title. Probably best to just show you the code that explains it better.
>
> This is a simplified example of what I want to do:
>
>
> # THIS DOESN'T WORK
> from random import choice
>
> class Expr(object):
>     """
>     Expr(expr, op, val) -> an expression object.
>     """
>
>     def __init__(self, expr, op='', val=''):
>         self.expr = expr # can be another instance of Expression.
>         self.op = op
>         self.val = val
>
>     def __str__(self):
>         return ("%s %s %s" % (self.expr, self.op, self.val)).strip()
>
>     def expand(self):
>         self = Expr(self, choice('+-*/'), choice('12345'))

"self" is just a local binding of the object to the name self.  You
can rebind the name like this as with any other local variable, but
that's all it does.  It doesn't modify the object in any way, and no
other bindings of the same object are affected.

If you actually want to modify the current object, you would need to
do something like:

    def expand(self):
        import copy
        self.expr = Expr(self.expr, self.op, self.val)
        self.op = choice('+-*/')
        self.val = choice('12345')

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


Thread

Recursive class | can you modify self directly? Russel Walker <russ.pobox@gmail.com> - 2013-07-09 15:01 -0700
  Re: Recursive class | can you modify self directly? Ian Kelly <ian.g.kelly@gmail.com> - 2013-07-09 16:18 -0600
  Re: Recursive class | can you modify self directly? Ian Kelly <ian.g.kelly@gmail.com> - 2013-07-09 16:20 -0600
    Re: Recursive class | can you modify self directly? Russel Walker <russ.pobox@gmail.com> - 2013-07-10 02:00 -0700
  Re: Recursive class | can you modify self directly? Dave Angel <davea@davea.name> - 2013-07-09 18:30 -0400
  Re: Recursive class | can you modify self directly? Ethan Furman <ethan@stoneleaf.us> - 2013-07-09 15:19 -0700
  Re: Recursive class | can you modify self directly? Russel Walker <russ.pobox@gmail.com> - 2013-07-10 01:58 -0700
    Re: Recursive class | can you modify self directly? Terry Reedy <tjreedy@udel.edu> - 2013-07-10 15:33 -0400
      Re: Recursive class | can you modify self directly? Russel Walker <russ.pobox@gmail.com> - 2013-07-10 13:09 -0700
  Re: Recursive class | can you modify self directly? Russel Walker <russ.pobox@gmail.com> - 2013-07-10 15:50 -0700
    Re: Recursive class | can you modify self directly? Ian Kelly <ian.g.kelly@gmail.com> - 2013-07-10 17:39 -0600

csiph-web