[IronPython] What C# methods do __repr__ and __str__ use?
Dino Viehland
dinov at exchange.microsoft.com
Wed May 28 23:52:31 CEST 2008
It's funny that we added __new__ but no __repr__ for array. Anyway, I've opened bug #16833 (http://www.codeplex.com/IronPython/WorkItem/View.aspx?WorkItemId=16833) to fix all of them so feel free to vote for it.
-----Original Message-----
From: users-bounces at lists.ironpython.com [mailto:users-bounces at lists.ironpython.com] On Behalf Of Michael Foord
Sent: Wednesday, May 28, 2008 2:40 PM
To: Discussion of IronPython
Subject: Re: [IronPython] What C# methods do __repr__ and __str__ use?
Dino Viehland wrote:
> We could definitely add a __repr__ for the normal .NET lists (and even other standard types like Dictionary). Maybe something like Python's set's repr so it'd look like:
>
> List[object]([2, 3, 4])
>
> Does that look good?
>
Spot on. Array could use the same love.
Michael Foord
> -----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 2:08 PM
> To: Discussion of IronPython
> Subject: Re: [IronPython] What C# methods do __repr__ and __str__ use?
>
> Dino Viehland wrote:
>
>> 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)
>>
>
> Agreed. But maybe there can be some name *patterns* that if implemented
> once would suffice for most languages. I'm not too worried about this
> though.
>
>
>> 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.
>>
>
> Sorry, I switched issues on you :) That was the point of that example...
> generic lists don't look like lists at all. I'm actually more concerned
> with this example than the previous. A generic list of ints, strings,
> etc. ought to be able to have a better representation in IP.
>
>
>> 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 :)
>>
>
> Perhaps generic lists could inherit a version of Python List's __repr__?
> (But of course, not just for Python, but for Ruby, etc.)
>
> Thanks!
>
> -Doug
>
>
>> -----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
>> _______________________________________________ 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
>
--
http://www.ironpythoninaction.com/
http://www.theotherdelia.co.uk/
http://www.voidspace.org.uk/
http://www.ironpython.info/
http://www.resolverhacks.net/
_______________________________________________
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