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

Edgardo edgardolor en gmail.com
Vie Nov 8 17:18:01 -03 2019


@Matias EXCELENTE!!!!

Me quedo super claro!!!

Mil gracias :D

*(se nota que todavía no vi ni clases ni métodos, cierto?)*

Abrazo!!!!

El vie., 8 nov. 2019 a las 17:09, Matías Bellone (<matiasbellone en gmail.com>)
escribió:

> 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
> _______________________________________________
> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
> Sitio web: http://www.python.org.ar/
>
> Para administrar la lista (o desuscribirse) entrar a
> http://listas.python.org.ar/listinfo/pyar
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20191108/7f480e7c/attachment.html>


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