[IronPython] What C# methods do __repr__ and __str__ use?

Dino Viehland dinov at exchange.microsoft.com
Wed May 28 22:57:24 CEST 2008


The problem w/ a common __repr__ is that each language will presumably have different syntax for creating the object.  For example a better repr in Python might be:

Pixel(255,255,128)

Where Ruby should probably display something like:

Pixel.new(255,255,128)

Having a repr of [255,255,128] isn't that meaningful because if I copy and paste that into my code I get a list instead of a Pixel back.  We could revisit what our default repr does for .NET objects that override ToString.  We discussed it once on the list long ago but that was mainly focused on dealing w/ multi-line ToStrings if I recall correctly - the thought of playing better with multiple languages wasn't much of an issue back then for us.

So basically I am open to suggestions :)

-----Original Message-----
From: users-bounces at lists.ironpython.com [mailto:users-bounces at lists.ironpython.com] On Behalf Of Douglas S. Blank
Sent: Wednesday, May 28, 2008 1:47 PM
To: Discussion of IronPython
Subject: Re: [IronPython] What C# methods do __repr__ and __str__ use?

Dino Viehland wrote:
> You'll want to implement the ICodeFormattable interface.  It looks
> like we don't pick up a method that's just named __repr__ right now.
> I could see us fixing that but I wouldn't think it's a high priority
> unless someone finds implementing ICodeFormattable burdensome.

Thanks, that did the trick (sample attached below)! It isn't burdensome,
but I wonder about what will happen when we use IronRuby, too? We'll we
need repr methods for each language?

I also wonder if things like a generic list couldn't pick up a
reasonable default __repr__ for use in all DLR languages.

We're using the .NET languages in an educational environment for new
students. Currently, we're going to have to add the __repr__ to all
classes, and add subclasses to all types for which there isn't a
reasonable repr default. For example, there is a pretty big difference
between: "[255, 255, 128]" and "<List<GraphicsCore+Pixel> object at
0x000002C [List<GraphicsCore+Pixel>]>" or whatever it might be.

In any event, we have a work around now; thanks again!

-Doug

using System;
using IronPython.Runtime; // for ICodeFormattable
using Microsoft.Scripting.Runtime; // for CodeContext
public class TestMe : ICodeFormattable {
     public virtual string __repr__(CodeContext context) {
        return String.Format("<Hi Mom>");
     }
}


> -----Original Message----- From: users-bounces at lists.ironpython.com
> [mailto:users-bounces at lists.ironpython.com] On Behalf Of Douglas S.
> Blank Sent: Wednesday, May 28, 2008 12:22 PM To: Discussion of
> IronPython Subject: Re: [IronPython] What C# methods do __repr__ and
> __str__ use?
>
> Anyone have an answer for this: I can't write C# code that has its
> own method for use in repr(). Am I missing something?
>
> -Doug
>
> Douglas S. Blank wrote:
>> On Fri, May 23, 2008 3:37 pm, Toni Alatalo said:
>>> Douglas S. Blank kirjoitti:
>>>> will use it? Likewise, what C# method is used in Python's
>>>> str(obj)?
>>>>
>>> i don't know, but would guess ToString() .. and wonder about it
>>> if it wasn't that but something else :o repr() can't guess, i
>>> don't think there's an equivalent in .net, but can very well be
>>> mistaken there.
>> It looks like the C# method __str__ is used for the Python method,
>> but in IP2B2 the C# method __repr__ is getting overwritten by an
>> auto generated method. Is that a bug, or is there something I'm
>> missing?
>>
>> $ ipy2 -i python/graphics.py
>>>>> pm = Pixmap() pm.getPixel(0,0)                    # What is
>>>>> this calling?
>> <Pixel object at 0x2B>
>>>>> pm.getPixel(0,0).__repr__()         # This is repr() too
>> '<GraphicsCore+Pixel object at 0x2C [GraphicsCore+Pixel]>'
>>>>> pm.getPixel(0,0).__Repr__()         # This is mine
>> '<Pixel at (0,0)>'
>>>>> pm.getPixel(0,0).__str__()          # That is mine, and str()
>>>>>
>> '<Pixel at (0,0)>'
>>>>> pm.getPixel(0,0).ToString()         # Used by __repr__
>> 'GraphicsCore+Pixel'
>>
>> -Doug
>>
>>>> -Doug
>>>>
>>> ~Toni
>>>
>>> _______________________________________________ Users mailing
>>> list Users at lists.ironpython.com
>>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>>
>>
>
> _______________________________________________ Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
> _______________________________________________ Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>

_______________________________________________
Users mailing list
Users at lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com



More information about the Ironpython-users mailing list