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).


class Vehiculo:

    matricula = ""
    marca = ""
    modelo = ""

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


class Vehiculo:

    matricula = ""
    marca = ""
    modelo = ""

    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:

    matricula = ""
    marca = ""
    modelo = ""

    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, vemos como se hace:


class Vehiculo:

    __matricula = ""
    __marca = ""
    __modelo = ""

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

    def get_matricula(self):
        return self.__matricula

    def set_matricula(self, value):
        self.__matricula = value

    def get_marca(self):
        return self.__marca

    def set_marca(self, value):
        self.__marca = value

    def get_modelo(self):
        return self.__modelo

    def set_modelo(self, value):
        self.__modelo = value


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

print("INICIAL")
print(v.get_matricula())
print(v.get_marca())
print(v.get_modelo())

v.set_marca("BMW")
v.set_modelo("SERIE3")

print("")
print("MODIFICADO")
print(v.get_matricula())
print(v.get_marca())
print(v.get_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:

    __matricula = ""
    __marca = ""
    __modelo = ""

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

    def get_matricula(self):
        return self.__matricula

    def set_matricula(self, value):
        self.__matricula = value

    def get_marca(self):
        return self.__marca

    def set_marca(self, value):
        self.__marca = value

    def get_modelo(self):
        return self.__modelo

    def set_modelo(self, value):
        self.__modelo = value

    def arrancar(self):
        print("Arrancando el vehiculo...")


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

print("INICIAL")
print(v.get_matricula())
print(v.get_marca())
print(v.get_modelo())

v.set_marca("BMW")
v.set_modelo("SERIE3")

print("")
print("MODIFICADO")
print(v.get_matricula())
print(v.get_marca())
print(v.get_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.

Etiquetas

2 comments

  1. 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. Lo tendre en cuenta, gracias por tu comentario.

Deja un comentario

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