Tengo un método que acepta un parámetro que puede ser de varios tipos, y tiene que hacer una cosa u otra dependiendo del tipo, pero si compruebo el tipo de dicho parámetro, no obtengo el tipo 'real' , Siempre recibo <type 'instance'>
, y eso es un desastre con mis comparaciones.¿Por qué el tipo (classInstance) devuelve 'instancia'?
que tienen algo así como:
from classes import Class1
from classes import Class2
# Both classes are declared in the same file.
# I don't know if that can be a problem #
# ... #
def foo(parameter)
if (type(parameter) == type(Class1()):
# ... #
elif (type(parameter) == type(Class2()):
# ... #
Y como type(parameter)
vuelve <type 'instance'>
y type(Class1())
es <type 'instance'>
así, resulta que incluso si el parámetro es una instancia de clase 2, que va en la primera comparación. ..
Por cierto, str(parameter.__class__)
muestra correctamente classes.Class1
. Supongo que siempre podría usar eso, pero me gustaría entender qué está pasando ... He hecho décimas comparaciones como esta y todas funcionaron correctamente ...
Gracias! :)
Wooo ... Eso funciona! :) Ahora voy a tratar de averiguar "por qué" ...: D – BorrajaX
Tiene que ver con el hecho de que las clases de nuevo estilo tienen más metadatos, incluyendo las cosas que 'tipo()' toca. –
Thx otra vez, estaba leyendo esto: http://www.cafepy.com/article/python_types_and_objects/python_types_and_objects.html Y yo como que (especie de) pensé que algo así tenía que ser la razón – BorrajaX