[gull] Types : [was: Php/MsSQL obsoletes?]
Daniel Cordey
dc at mjt.ch
Thu Sep 29 14:33:24 CEST 2005
On Thursday 29 September 2005 14:04, Leopoldo Ghielmetti wrote:
> Pas tout a fait exact:
> Python 2.3.3 (#1, Feb 5 2005, 16:22:10)
> [GCC 3.3.3 (SuSE Linux)] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
>
> >>> class toto:
>
> ... def __init__(self):
> ... pass
> ...
>
> >>> a=toto()
> >>> print a
>
> <__main__.toto instance at 0x4039828c>
>
>
> Pas d'exception!
Mea culpa... Chaque instantiation d'objet possede un appel implicite a un
equivalent '@poperty' de self... lorsque l'on accede a la methode __repr__.
En redefinissant cette methode :
class toto :
def __init__(self) :
pass
def __repr__(self) :
return "fake..."
a = toto()
print "%s" % a
A l'execution :
dc at ...> python except.py
fake...
dc at ...>
Il se trouve que python va faire appel a __repr__ seulement si __str__
n'existe pas. Dans le cas ou __str__ existe, __repr__ est simplement ignore.
Mais en l'absence de __str__, si la valeur de retour n'est pas de type 'str',
nous avons une exception. EN remplacant :
return "fake..."
par
return 123
print ca reconnaitre que 123 n'est pas un 'str', et donc cherche a appele la
methode __str__ de l'objet 'a'. Or il n'y en a pas. Execution :
Traceback (most recent call last):
File "except.py", line 10, in ?
print "%s" % a
TypeError: __str__ returned non-string (type int)
La preuve ? Il suffit de definir :
def __str__(self) :
return 'New 123...'
dans la classe 'toto' et l'execution donne :
New 123...
Or, __repr__ n'est appele que si __str__ n'existe pas.
Voila :-)
dc
More information about the gull
mailing list