Crear clases Python 3 POO

Hola  a todos, hoy os voy a explicar como podemos crear clases con Python 3.

La programación orientada a objetos es un paradigma de la programación que descompone el código de una clase en unidades llamados objetos.

Un objeto es una entidad existente en la memoria del ordenador que tiene unas propiedades, llamados atributos, y unas operaciones disponibles específicas, llamados métodos.

Estos objetos vienen de clases, en realidad hasta ahora hemos usado una clase, solo que esta clase tenia un método ejecutable.

Para crear una clase en Python 3, se hace así:


class Vehiculo:

 

Hemos dicho que una clase tiene atributos, que es lo que define a una clase, en este caso, podemos definir un vehículo por su matricula, marca y modelo (puedes añadir los que tu quieras).

En algún momento debemos darle valores  a estos atributos inicialmente y eso lo podemos hacer con los constructores. Se hace así:


class Vehiculo:

    def __init__(self, matricula, marca, modelo):
        self.matricula = matricula
        self.marca = marca
        self.modelo = modelo

Es muy importante el self para los métodos, lo vas a ver mucho.

Vamos a ver como podemos usar estos constructores.


class Vehiculo:

    def __init__(self, matricula, marca, modelo):
        self.matricula = matricula
        self.marca = marca
        self.modelo = modelo


v = Vehiculo("1111AAAA", "SEAT", "IBIZA")

print(v.matricula)
print(v.marca)
print(v.modelo)

Si yo ejecutara esto, saldría lo siguiente:

Fíjate que puedo coger los valores de los atributos directamente, por regla general, se debería hacer con un get y para modificar usamos set, pero en python, tenemos otra forma de hacerlo mas «python», vemos como se hace:

class Vehiculo:

    def __init__(self, matricula, marca, modelo):
        self.__matricula = matricula
        self.__marca = marca
        self.__modelo = modelo

    @property
    def matricula(self):
        return self.__matricula

    @matricula.setter
    def matricula(self, value):
        self.__matricula = value

    @property
    def marca(self):
        return self.__marca

    @marca.setter
    def marca(self, value):
        self.__marca = value

    @property
    def modelo(self):
        return self.__modelo

    @modelo.setter
    def modelo(self, value):
        self.__modelo = value


v = Vehiculo("1111AAAA", "SEAT", "IBIZA")

print("INICIAL")
print(v.matricula)
print(v.marca)
print(v.modelo)

v.marca = "BMW"
v.modelo = "SERIE3"

print("")
print("MODIFICADO")
print(v.matricula)
print(v.marca)
print(v.modelo)

Poner __ delante de un atributo significa que es un atributo privado y no podremos acceder desde fuera, lo haremos con un método que veremos después.

Ejecutamos y mostraría lo siguiente:

Por último, veremos como crear métodos aunque ya lo hemos visto con los get y set.

class Vehiculo:

    def __init__(self, matricula, marca, modelo):
        self.__matricula = matricula
        self.__marca = marca
        self.__modelo = modelo

    @property
    def matricula(self):
        return self.__matricula

    @matricula.setter
    def matricula(self, value):
        self.__matricula = value

    @property
    def marca(self):
        return self.__marca

    @marca.setter
    def marca(self, value):
        self.__marca = value

    @property
    def modelo(self):
        return self.__modelo

    @modelo.setter
    def modelo(self, value):
        self.__modelo = value


v = Vehiculo("1111AAAA", "SEAT", "IBIZA")

print("INICIAL")
print(v.matricula)
print(v.marca)
print(v.modelo)

v.marca = "BMW"
v.modelo = "SERIE3"

print("")
print("MODIFICADO")
print(v.matricula)
print(v.marca)
print(v.modelo)
v.arrancar() 

Este es el resultado:

Seguiremos viendo mas de POO en el blog, así estad atentos.

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Compartir

2 comentarios

  1. israelem

    Buenas tardes,
    Buen ejemplo para indicar lo básico de clases en Python. Sin embargo, hay un error que aunque no salta a la vista, sí que es grave a nivel de concepto.

    Tal como has definido los atributos matricula, modelo y marca, lo has hecho como si fueran atributos de clase y no de instancia. De modo que no haría falta declarar las variables vacías después del nombre de la clase, simplemente hay que hacerlo en el __init__.

    También recomendarte que le eches un vistazo a los decoradores @property y @nombreatributo.setter para demostrar la encapsulación en python, queda más limpio el código o más pythónico como se suele decir.

    Un saludo.

  2. Disco Duro de Roer Post author

    Lo tendre en cuenta, gracias por tu comentario.

Deja una respuesta

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