On 07/09/2013 03:01 PM, Russel Walker wrote:

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 name. In `expand()` you are rebinding the name `self` away from the object and to a new Expr instance. If you want to change `self` the original object you have to do something like:

    def expand(self):
        self.op = choice('+-*/')
        self.val = choice('12345')

--
~Ethan~
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to