>> Generally we try to meet in the middle on __repr__ - in many cases,  
>> it's most convenient if the output from __repr__ can be fed back into a  
>> factory or constructor for the class the text came from, so that the  
>> following expression is legal:
>>  new_object = Microsoft.DirectX.Vector3(repr(old_object))
>>  since
>>  eval(repr(old_object))
>>  usually isn't convenient, fast, or safe.
>Consider the output of repr(file('foo', 'rw')).

The standard library is inconsistent on this, some return "< description  
>", some an evaluable expression, (e.g. sets,mhlib).

The docs say:

'If at all possible, this should look like a valid Python expression that  
could be used to recreate an object with the same value (given an  
appropriate environment). If this is not possible, a string of the form  
"<...some useful description...>" should be returned.'

My reading of that, and the example of the standard library, suggests that  
repr(Microsoft.DirectX.Vector3()) should return something like  
"Vector3(0,0,0)".

But I don't see how IronPython can produce valid recreation expressions in  
the general case. Given that, my reading of the docs is that the angle  
delimiters are the conventional method of distinguishing descriptive repr  
strings from valid expressions.

FWIW in the general case I would have something equivalent to:

def GenRepr(object):
     strrep=object.ToString()
     if len(strrep)<40 and strrep.find('\n')==-1:
         return "<%s: %s>" % (object.__class__.__name__, repr(strrep)[1:-1])
     else:
         return "<%s at 0x%x>" % (object.__class__.__name__, id(object))

i.e. include a string representation only where it is reasonably concise,  
and include the markers in both cases.

Neville.
_______________________________________________
users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

Reply via email to