Cómo obtener el nombre de clase de un objeto como una cadena en Python


Mejor respuesta

Puede obtener el nombre accediendo a \_\_name\_\_ atributo de la clase; y si tiene un objeto, puede obtener la clase accediendo al atributo \_\_class\_\_ del objeto.

>>> class SillyClassName:

... @classmethod

... def my\_name(cls\_):

... return cls\_.\_\_name\_\_

...

... def class\_name(self):

... return self.\_\_class\_\_.\_\_name\_\_

...

>>> SillyClassName.my\_name()

SillyClassName

>>>

>>> inst = SillyClassName()

>>> inst.class\_name()

SillyClassName

Tenga cuidado: si usa esto para acceder al nombre de la clase en una situación en la que está usando herencia, entonces el uso de self.\_\_class\_\_.\_\_name\_\_\_ devolverá el nombre de la clase original, no el clase que contiene el código.

>>> class SecondSillyClass(SillyClassName):

... pass

...

>>> inst = SecondSillyClass()

>>> SecondSillyClass.my\_name()

SecondSillyClass

>>> inst.class\_name()

SecondSillyClass

Responde

de tres formas :

  • Use el operador in: "orld" in "Hello World" por ejemplo
  • Use el find() método: "Hello World".find("or"): devuelve el índice de la subcadena en la cadena principal; devuelve -1 cuando no está en la cadena principal.
  • Use el count() método "Hello World".count("or"): esto devuelve la frecuencia con la que la cadena secundaria está contenido en la cadena principal: devuelve 0 si la subcadena no está en la cadena principal.

Usando find () o count () solo para probar si una subcadena está contenida en una cadena principal no es una buena práctica, pero se puede hacer si planea usar la información que proporcionan por otras razones.

Por ejemplo, hacer esto:

if substring in mainstring:

index = mainstring.find(substring)

after = maintstring[index+len(substring):]

Es realmente pobre práctica – sería mejor hacer esto:

index = mainstring.find(substring)

if index != -1:

after = maintstring[index+len(substring):]

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *