# Clases en Python 3

## <mark style="color:blue;">1. ¿Qué es la Orientación a Objetos en Python 3?</mark>

La orientación a objetos es un paradigma de programación que proporciona unas estructuras denominadas objetos con el objetivo de estructurar los programas para que propiedades y comportamientos similares se agrupen.

**Python es un lenguaje orientado a objetos y todas las estructuras que hemos visto en secciones previas son objetos.**

La programación orientada a objetos nos permite crear estructuras que representan cosas de la vida real a través de una construcción de que se denomina `clase` y después crear objetos basándonos en estas clases.

## <mark style="color:blue;">2. ¿Qué son las clases?</mark>

Las clases son la estructura principal de la programación orientada a objetos y nos proporcionan un medio para agrupar datos y funcionalidad. **Al crear una nueva clase se crea un nuevo tipo de dato, lo que permite crear nuevas instancias de ese tipo que se denominan objetos**. Cada instancia de clase puede tener atributos adjuntos para mantener su estado. Las instancias de clase también pueden tener métodos (definidos por su clase) para modificar su estado.

La sintaxis que se utiliza para definir clases en Python 3 es la siguiente:

```python
class <nombre_clase>:
    <sentencia(s)>
```

```python
class Coche:
    pass
```

Los nombres de las clases en Python siempre deben comenzar con una letra mayúscula. Aunque Python no fuerza que esto sea así a nivel sintáctico, es una convención muy importante.

#### 3. ¿Qué son los objetos?

Una vez que hemos definido una clase, podemos utilizarla para crear varios objetos pertenecientes a esa clase. La creación de un nuevo objeto a partir de una clase se denomina **instanciar**.

La sintaxis que utilizamos en Python 3 para instanciar un objeto es:

```python
<nombre_clase>([<argumentos>])
```

```python
class Coche:
    pass
    
coche1 = Coche()

coche1
<__main__.Coche at 0x103fc1c30>

type(coche1)
__main__.Coche

id(coche1)
4361821232

coche2 = Coche()

coche1 is coche2
False

id(coche2)
4361826416
```
