[pyar] Duda: str.upper("string") vs "string".upper()

Matías Bellone matiasbellone en gmail.com
Vie Nov 8 17:09:09 -03 2019


On Fri, Nov 8, 2019 at 4:48 PM Edgardo <edgardolor en gmail.com> wrote:

>
> Mi intento inicial fue:
>
> *the_string = "I'm a Ramblin' Wreck"*
>
>
>
>
> *try:    print(str.upper(the_string))except AttributeError:    print("The
> variable was not a string!")*
>
> El mismo arroja un error de TypeError, al parecer str.upper() solo acepta
> como argumento, el tipo de datos string
>
> Al modificar el código a:
>
>
>
>
>
> *try:    print(the_string.upper())except AttributeError:    print("The
> variable was not a string!") *
>
> El mismo corre con éxito (el ejercicio atrapa todos las excepciones de
> tipo AttributeError)
>
> Alguien seria tan amable de explicarme la diferencia entre AMBOS MÉTODOS?
>
> No recuerdo de donde saque str.upper("cadena") pero por lo visto me quedo
> porque fue mi primer intento, pero al buscar en info en google solo
> encuentro referencias al metodo "cadena".upper()
>
>
str es la clase a la que pertenecen todas las cadenas[1]. Como es una
clase, define los métodos disponibles para cada instancia de dicha clase.
De esa forma, se podría pensar que el código detrás de esa clase contiene
algo como lo siguiente:

class str(object):
    def upper(self):
         ...

Si imprimimos ambas cosas en el intérprete de python:

>>> str
<class 'str'>
>>> str.upper
<method 'upper' of 'str' objects>
>>>

Es decir que str.upper es una función de la clase str. Pero no está ligada
a ningún objeto del tipo str - en el lingo *unbound instance method* -; por
lo que si querés llamarlo, tenés que pasarle un objeto del tipo str... y si
no lo hacés el error te lo da el motor de python por tratar de pasarle un
objeto que no es de la clase correspondiente. Es decir, un error de tipo,
de ahí la excepción que lanza.

Ahora, si agarrás cualquier objeto o clase y tratás de hacer x.upper() es
muy posible que dicho objeto/clase no tenga un método upper por lo que el
error es que no va a encontrar el atributo al que tratás de acceder y la
excepción va a ser la que estabas esperando en primer lugar.

Espero que te haya aclarado algo. Si no, seguí preguntando.

Saludos,
Toote

[1] desde python 3 en adelante, en python 2 es un poco diferente
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20191108/fc254d55/attachment.html>


Más información sobre la lista de distribución pyar