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

Michael Foord fuzzyman at voidspace.org.uk
Wed May 28 23:39:55 CEST 2008


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/




More information about the Ironpython-users mailing list