2010-04-20 9 views
9

tengo una pregunta rápida. Tengo una matriz 2D que almacena una instancia de una clase. A los elementos de la matriz se les asigna una clase particular basada en un archivo de texto que se lee antes en el programa. Como no sé, sin mirar en el archivo, qué clase está almacenada en un elemento particular, podría referirme a un campo que no existe en ese índice (en referencia a la apariencia cuando una instancia de temperatura se almacena en ese índice). He encontrado un método para probar esto, pero es largo y requiere una segunda matriz. ¿Hay una función para probar la existencia de un campo en una clase?Probando la existencia de un campo en una clase

class temp(): 
    name = "default" 

class temp1(): 
    appearance = "@" 

Respuesta

3

¿Usted está buscando:

isinstance (objeto, ClassInfo)

Volver cierto si el argumento objeto es una ejemplo del argumento ClassInfo o de un (directo o indirecto) subclase de la misma. También devuelve verdadero si classinfo es un objeto de tipo (clase de estilo nuevo) y el objeto es un objeto de ese tipo o de una subclase directa o indirecta de la misma. Si el objeto no es una instancia de clase o un objeto del tipo dado , la función siempre devuelve falso. Si classinfo no es un objeto de clase ni un objeto de tipo, puede ser una tupla de clase o tipo objetos, o puede recursivamente contener otras tales tuplas (otros tipos de secuencia no son aceptados). Si classinfo no es una clase clase, tipo o tupla de clases, tipos y tales tuplas, se produce una excepción TypeError .

Lo que sea que intentes hacer no parece una buena idea. Por favor describa su necesidad original con más detalle, y le ayudaremos a encontrar un mejor diseño.

25

hasattr(x, 'foo') es una función incorporada binario que comprueba si el objeto tiene un atributo xx.foo (si se recibe de su clase o no), lo que parece cerca de lo que estás pidiendo. Si lo que está preguntando es en realidad lo que debería estar haciendo es un problema diferente, como sugiere la respuesta de @ Eli, su diseño parece extraño. Sin embargo, esto responde su pregunta como se le preguntó ;-).

2

Puede usar el manejo de excepciones para hacer esto también.

try: 
    val = x.name 
except AttributeError: 
    val = x.appearance 
Cuestiones relacionadas