Saltar al contenido

Verificando si una variable pertenece a una clase en Python

Solución:

Podrías usar el __dict__ propiedad que compone una clase, por ejemplo:

In [1]: class Foo(object):
   ...:     bar = "b"
   ...:     zulu = "z"
   ...:     
In [2]: "bar"  in Foo.__dict__
Out[2]: True

O mientras busca los valores, use __dict__.values():

In [3]: "b" in Foo.__dict__.values()
Out[3]: True

Como señala Peter Wood, el vars() incorporado también se puede utilizar para recuperar el __dict__:

In [12]: "b" in vars(Foo).values()
Out[12]: True

los __dict__ La propiedad se usa como un espacio de nombres para las clases y, por lo tanto, también devolverá todos los métodos, métodos mágicos y propiedades privadas de la clase, por lo que, para mayor solidez, es posible que desee modificar ligeramente su búsqueda para compensar.

En su caso, es posible que desee utilizar un classmethod, tal como:

class States(object):
    ALABAMA = "AL"
    FLORIDA = "FL"

    @classmethod
    def is_state(cls, to_find):
        print(vars(cls))
        states = [val for key, val in vars(cls).items()
                  if not key.startswith("__")
                  and isinstance(val, str)]
        return to_find in states

States.is_state("AL") # True
States.is_state("FL") # True
States.is_state("is_state") # False
States.is_state("__module__") # False

Actualizar
Esto responde claramente a la pregunta de los OP, pero los lectores también pueden estar interesados ​​en la Enum biblioteca en Python 3, que posiblemente sería un mejor contenedor para datos como este.

¿Por qué no usas un diccionario? Es mucho más simple y las búsquedas también serán más fáciles.

states = 'AL': 'Alabama', 'AK': 'Alaska' ... 
test_state="Foo"

if test_state not in states.keys():
    print(' is not valid input'.format(test_state))

Sugeriría usar Enum para definir ambos Gender y States.
Enum si forma parte de la biblioteca estándar en Python 3. Si estas en Python 2 use enum34, instale con pip install enum34.

from enum import Enum
class States(Enum):
    ALABAMA = 'AL'
    ALASKA = 'AK'
    ARIZONA = 'AZ'
    ARKANSAS = 'AR'
    CALIFORNIA = 'CA'
    COLORADO = 'CO'
    CONNECTICUT = 'CT'
    DELAWARE = 'DE'
    DISTRICTOFCOLUMBIA = 'DC'
    ...

Luego puede verificar si una variable es uno de los estados mediante

isinstance(variable, States)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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