On Jun 2, 2008, at 10:18 PM, William Stein wrote: > On Mon, Jun 2, 2008 at 10:15 PM, Robert Bradshaw > <[EMAIL PROTECTED]> wrote: >> >> On Jun 2, 2008, at 9:51 PM, Igor Tolkov wrote: >> >>> I am trying to extend the integer class: >>> >>> {{ >>> class Quple(Integer): >>> def __init__(self, a, b): >>> Integer.__init__(self, b) >>> self.tup = (a, b) >>> >>> print Quple(3,1) >>> /// >>> >>> 0 >>> }}} >>> >>> I should get "1". I stared at this code for too long already. >> >> What are you trying to accomplish? In this case it could probably be >> done an easier way because the Integer class has lots of hacks to >> make it faster which may break extending it with a normal Python >> class. >> >> - Robert > > Hi Robert, > > I just noticed this evil property of Sage integers, i.e., they are > mutable > no matter what: > > sage: n = 5 > sage: n.__init__(123) > sage: n > 123 > > Abused this could easily lead to very subtle bugs, like the > one below. Thoughts? > > > sage: m = matrix(ZZ,2,[1,2,3,4]) > sage: d = m.det(); d > -2 > sage: d.__init__(389) > sage: m > > [1 2] > [3 4] > sage: m.det() > 389 > > The builtin Python integer type does *not* work this way: > > sage: n = int(5) > sage: n.__init__(123) > sage: n > 5 > > Bug?
Oh, that's bad... Of course, there's no stopping there: sage: K.<a> = NumberField(x^2-2) sage: a.__init__(K, 1/3) sage: a 1/3 For Integers, I guess we could put more in the __new__ method, but I think in general it's just something we're going to have to accept. - Robert --~--~---------~--~----~------------~-------~--~----~ To post to this group, send email to sage-devel@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sage-devel URLs: http://www.sagemath.org -~----------~----~----~----~------~----~------~--~---