Читать книгу El gran libro de Python - Marco Buttu - Страница 28
Definir las clases
ОглавлениеLos tipos de datos básicos son objetos increíblemente útiles que nos permiten ser inmediatamente productivos y escribir gran parte del código sin sentir la necesidad de disponer de objetos de otro tipo. Pero cada uno de nosotros tiene sus propias exigencias, y quizás desearía utilizar objetos que le faciliten al máximo el trabajo.
Supongamos, por ejemplo, que queremos escribir una aplicación que solicite al usuario completar una acción de registro insertando sus datos, como nombre y apellido. En este caso, estaría bien tener los objetos con las carácterísticas de una persona, que tengan, por ejemplo, como atributos precisamente un nombre, un apellido y un método que restituyera el tiempo pasado desde el momento del registro. Para hacerlo, el lenguaje dispone de la instrucción class. Esta permite crear un objeto llamado clase o tipo, mediante el cual podemos crear otros objetos denominados instancias de la clase. Si hacemos memoria, recordaremos que ya hemos presentado estos conceptos en la sección Tipos de datos básicos, dedicada precisamente a las instancias de los tipos de datos básicos.
Todas las instancias de una clase tienen los mismos atributos, por lo que, por ejemplo, podemos crear una clase que defina a una persona genérica y utilizar sus instancias para representar a los usuarios que se registran en nuestra aplicación:
Las instancias de una clase MyClass se denominan también objetos de tipo MyClass, por lo que diremos que las instancias p1 y p2 del tipo Person son objetos de tipo Person.
El método _ _init_ _() inicia y termina con dos guiones bajos, por lo que, como ya hemos dicho en la sección Tipos de datos básicos, es un método especial; de hecho, es llamado automáticamente por Python justo después de la creación de la instancia con el objetivo de inicializarla. El mecanismo es el siguiente: cuando Python encuentra la instrucción p1 = Person('Tim', 'Peters'), primero crea la instancia, después llama al método _ _init_ _() y le pasa automáticamente la instancia que acaba de crear como primer argumento y, por último, devuelve la instancia asignándola a p1. Por tanto, en realidad Python nos evita hacer manualmente la llamada Person._ _init_ _(p1, 'Tim', 'Peters'). El primer parámetro de _ _init_ _(), normalmente denominado self, está presente también en la definición del método Person.since(). De hecho, la llamada a este método mediante una instancia, como en el caso de p2.since(), equivale a la llamada Person.since(p2), por lo que también en este ejemplo la instancia se pasa automáticamente al método como primer argumento y se asigna a self.
La función integrada isinstance() nos dice si un objeto es una instancia de una clase:
Si no tenéis una base en programación orientada a objetos y no os queda claro todo cuanto hemos dicho acerca del concepto de clase y de su entorno de uso, no os preocupéis: el Capítulo 5 está dedicado por completo a estos argumentos.