No, de hecho, es abrumadoramente común no para la prueba de valores de tipo, al igual que en el segundo enfoque. La idea es que un cliente de su código (es decir, algún otro programador que use su clase) pueda pasar cualquier tipo de objeto que tenga todos los métodos o propiedades apropiados. Si no es una instancia de alguna clase en particular, está bien; tu código nunca necesita saber la diferencia. Esto se llama pato escribiendo, debido al adagio "Si grazna como un pato y vuela como un pato, bien podría ser un pato" (bueno, ese no es el adagio actual, pero tengo la esencia de eso, creo)
Un lugar donde verá esto es en la biblioteca estándar, con cualquier función que maneje la entrada o salida de archivos. En lugar de requerir un objeto real file
, tomarán cualquier cosa que implemente el método read()
o readline()
(según la función) o write()
para escribir. De hecho, a menudo verá esto en la documentación, p. con tokenize.generate_tokens
, lo que me acaba de pasar a estar buscando en el día de hoy:
El generador generate_tokens()
requiere un argumento, readline, que debe ser un objeto invocable que proporciona la misma interfaz que el método de readline()
incorporada objetos de archivo (consulte la sección File Objects). Cada llamada a la función debe devolver una línea de entrada como una cadena.
Esto le permite utilizar un objeto StringIO
(como un archivo en memoria), o algo más loca como un cuadro de diálogo, en lugar de un archivo real.
En su propio código, solo acceda a las propiedades de un objeto que necesite, y si es el tipo incorrecto de objeto, una de las propiedades que necesita no estará allí y arrojará una excepción.
Segundo eso. También vea [EAFP] (http://docs.python.org/glossary.html#term-eafp): es más fácil pedir perdón que permiso. –
esto es muy interesante. Después de todo, deberíamos disfrutar de las características de las pitones en lugar de defendernos de ellas. –