¿Qué es una clase?
Una clase es una estructura de Python (y de muchos otros lenguajes de programación), que sirve para crear una plantilla generadora de objetos.
Gracias al uso de clases, conseguiremos grandes ventajas.
Clase en inglés se dice class.

Espacio publicitario
Sintaxis de una clase
La sintaxis de una clase es muy sencilla; tan solo hay que declararla con la palabra reservada class, darle un nombre, y opcionalmente unos paréntesis.
class NombreClase():
Los paréntesis después del nombre de la clase son obligatorios solo si vas a utilizar la herencia de clases; tema que trataré en otro capítulo.
Al ver los dos puntos en la declaración de la clase, podemos deducir en Python, que lo que viene a continuación es un bloque de código indentado, como ocurre con los condicionales, bucles y funciones:
class NombreClase():
# Bloque de código de la clase
Convención de nombres CapWords
Los nombres de las clases se escriben siguiendo la convención CapWords, (primera letra de cada palabra en letra mayúscula), y no en snake_case como la mayoría de nombres en Python.
CapWords es la convención de nombres de clase que especifica la guía de estilo de Python (PEP 8).
Esta especifica que los nombres de clase irán con cada primera letra de cada palabra que forme el nombre, en letra mayúscula.
La guía de estilo tiene una infinidad de convenciones con las que escribir correctamente código Python, y se va actualizando con mucha frecuencia.
CapWords es un nombre creado a partir de las palabras capital y words, que en español podemos traducir como “palabras” (words) “capitales” (caps).
El motivo principal de utilizar este método de escritura en clases, es para diferenciar a simple vista, lo que es el nombre de una clase, de lo que es el nombre, de por ejemplo, una variable o una función.
En clases propias del lenguaje de Python, verás que se incumple esta norma especificada en la guía de estilo PEP 8.
Por ejemplo, las clases
int
,float
,list
,dict
, etc., son nombres de clase anteriores a esta convención, por eso, no la implementan, ya que realmente, sus nombres siguiendo esta convención, aplicada a posteriori, deberían escribirse comoInt
,Float
,List
,Dict
, etc.
Espacio publicitario
Caracteres admitidos
En los nombres de clase se admiten los mismos caracteres
que cualquier otro nombre de Python; solo utiliza letras,
números y guiones bajos (_
). Además, que el
nombre de clase no empiece por un valor numérico.
Ten en cuenta, que aunque sintácticamente hablando puedas utilizar los guiones bajos para los nombres de las clases, estarás incumpliendo la convención de nombres de clase CapWords, que no los utiliza.
El uso de pass en clases
Al igual que hacemos con los condicionales, bucles o
funciones, podemos dejar una clase declarada, y “sin
código” en su interior, utilizando la palabra reservada
pass
. Esto evitará un error por indentación
(IndentationError
).
class NombreClase():
pass
El uso de pass en clases se suele emplear para definir primero el esquema general de las clases, y después ir implementando código en ellas.
También es posible utilizar un comentario de tipo docstring, en lugar de utilizar la palabra reservada
pass
:class NombreClase(): """Esta clase servirá para ..."""
La palabra reservada pass, puede traducirse al español como pasar o dejar pasar.
Aun teniendo una clase solo con pass
, esta ya
está lista para crear objetos a partir de ella. Así,
también podemos ir definiendo objetos, antes de que ni
siquiera tengan “vida” (código que haga algo con ellos).
Partes de una clase
En las clases contamos principalmente con dos elementos: atributos y métodos. Los atributos son variables que están dentro de una clase y los métodos son funciones que están dentro de una clase.
Normalmente, el orden de declaración de estos elementos, es primero todos los atributos y luego los métodos. Este orden se suele llevar a cabo de esta forma, por una cuestión de organización en el código. En muchas ocasiones, daremos unos atributos a la clase, que serán accedidos múltiples veces por los métodos de esta. Entonces, lo lógico, suele ser colocar todos los atributos primero, y luego los métodos; no obstante, se trata simplemente de una buena práctica, no de una regla obligatoria.
En inglés, atributo se dice attribute y método, method.
Ejemplo de clase con atributos y métodos
A continuación, puedes ver un ejemplo de una clase con dos atributos y dos métodos:
# Declaración de clase
class NombreClase():
# Atributos de clase
atributo_1 = "valor 1"
atributo_2 = "valor 2"
# Métodos
def metodo_1(self):
print("Método de clase")
def metodo_2(self):
print("Método de clase")
Verás que los métodos cuentan con el parámetro especial llamado
self
; explicaré esto en otro capítulo.
Espacio publicitario
Las clases: moldes para objetos

La programación orientada a objetos, está diseñada para moldear con código objetos del mundo real o imaginario.
Imagina que estás desarrollando un videojuego con
vehículos, o bien, si los videojuegos no son lo tuyo, que
imagines un software (programa) de gestión
empresarial para un concesionario, el cual tiene objetos
de tipo vehiculo
.
Ahora que ya tenemos en la cabeza la imagen del objeto en cuestión, empecemos por el molde (clase), y seguiremos en otro capítulo por los objetos (producto del molde).
Atributos y métodos de la clase
Empecemos pensando en las cosas que podrían describir de forma general a un vehículo terrestre. Cosas como el color, la longitud o el número de ruedas. De forma general, todos los vehículos terrestres, cuentan con estas características. Entonces, son buenos atributos para una clase.
Creando atributos en una clase
Para crear atributos en una clase, lo haremos con las mismas normas que con las variables.
Aquí tienes una clase que consta de tres atributos:
# Se declara la clase vehiculo
class Vehiculo():
# Atributos
color = None
longitud_metros = None
ruedas = 4
En principio, con la clase estamos creando la plantilla
general para distintos vehículos. Entonces, no quiero
especificar un color
todavía, así que lo dejo
como valor None
.
None
es un valor especial en Python, que significa “no hay valor”. Se puede usar para indicar que una variable no tiene un valor asignado, o para devolver un valor nulo, y evitar así el error por variable sin inicializar.
Por la longitud, tampoco va a ser la misma para todos los
vehículos, de forma que aplicamos también el valor
None
.
Sin embargo, para los tipos de vehículos que me imagino, todos tendrán 4 ruedas, así que en este caso, sí que inicializo ese valor.
Por lo tanto, tenemos un molde de objetos, que creará
objetos de tipo Vehiculo
, con estos tres
valores por defecto.
Creando métodos en una clase
Después, sabemos que con los vehículos, podemos realizar ciertas acciones. Acciones típicas como arrancar el motor, o detenerlo.
Aquí es donde entran en juego los métodos.
Para crear métodos en una clase, escribiremos funciones
con el parámetro especial self
:
# Se declara la clase vehiculo
class Vehiculo():
# Atributos
color = None
longitud_metros = None
ruedas = 4
# Métodos
def arrancar(self):
print("El motor ha arrancado.")
def detener(self):
print("El motor está detenido.")
Muy pronto verás la finalidad de todos estos atributos y métodos. Primero tienes que ver como se crean los objetos, y se utilizan con ellos.
En ocasiones, leerás o escucharás decir “miembros de una clase”. Esto se refiere al conjunto de elementos que la definen, los atributos y los métodos. Por ende, un atributo es un miembro de una clase, y un método, otro.
Espacio publicitario
Python y sus clases
Los tipos de datos de Python, como son str
,
int
, float
, bool
,
list
, tuple
, etc. Son objetos
generados a partir de sus respectivas clases. Por ejemplo,
los objetos de tipo str
, provienen de la
class str
.
Es posible comprobarlo con la función predefinida
type()
:
print(type("Hola"))
<class 'str'>
La función predefinida
type()
, nos permite ver el tipo de dato al que corresponde un elemento pasado como argumento.
La función predefinida type()
, nos permite
ver el tipo de dato al que corresponde un elemento pasado
como argumento.
Esta clase tiene métodos. Estos métodos nos permiten “hacer cosas” con los objetos, por ejemplo:
texto = "Python: El poder de los objetos."
print(type(texto))
mayusculas = texto.upper()
print(mayusculas)
<class 'str'>
PYTHON: EL PODER DE LOS OBJETOS.
En este caso, he utilizado el método
upper()
de la clase str
, para
convertir el texto del objeto str
a
mayúsculas.
Fíjate en el poder de los objetos, estos pueden llevar un montón de código, que ni siquiera está directamente escrito en la misma hoja de código Python.
¿Cuánto código nos ahorra este método ya escrito en la
clase, en cada hoja
.py que utilicemos, al
no tener que escribir todo el código del método
upper()
en una función?
Además de este método, la clase str
contiene
una gran cantidad de métodos, con los que hacer cosas por
el estilo, por lo tanto, con un simple objeto tenemos
acceso a un montón de código reutilizable.
Espacio publicitario
Espacio publicitario
Ejercicios de Python para resolver
1. Crea una clase con el nombre que quieras; estará vacía.
Tan solo tenías que declarar la clase con
pass
, para poder dejarla vacía:
class ClaseVacia():
pass
O bien, escribir en su lugar un comentario docstring:
class ClaseVacia():
"""Comentario docstring"""
Ten en cuenta, que el nombre debería respetar siempre la convención de nombres en CapWords.
2. Modifica los siguientes nombres para que sean nombres de clase correctos, según la convención.
- mi clase
- usuario_premium
- PRODUCTO-TIENDA
Según la convención de nombres de clase de Python, los nombres deberían quedar así escritos:
MiClase
UsuarioPremium
ProductoTienda
3. Crea una clase llamada Usuario
, que tendrá
los siguientes atributos y métodos (para los atributos,
pon los valores que quieras):
Atributos:
- Nombre
- Apellidos
- Edad
- Dirección
- Teléfono
Métodos:
- Iniciar sesión
- Cerrar sesión
- Cambiar nombre de perfil
Ten en cuenta, que para que funcione sin errores, deberás ajustar los nombres de los métodos y atributos, a las normas y convenciones de nombres de Python.
Los métodos, al igual que las funciones normales, pueden estar “sin código” en su bloque.
Puesto que, de momento, no tenemos nada que añadir, deberás ingeniar una forma de que no te dé error, por dejar métodos sin código, aunque también puedes poner un mensaje informativo, con un
print()
, en cada uno, si quieres hacerlo un poco más completo.
La clase, según como te la he pedido, debería quedar así:
class Usuario():
# Atributos
nombre = "Enrique"
apellidos = "Barros Fernández"
edad = 32
direccion = "C/Universo n.º 71"
telefono = "123456789"
# Métodos
def iniciar_sesion(self):
print("Se inició la sesión.")
def cerrar_sesion(self):
print("Se cerró la sesión.")
def cambiar_nombre_perfil(self):
print("Se cambió el nombre de perfil.")
Puede que en lugar de especificar un mensaje en los métodos, lo hayas dejado con
pass
, o con docstring.
4. En la siguiente clase, encuentra todos los fallos, ya sean de sintaxis o de convenciones:
clase persona:
nombre : "Lara"
edad : 67
telefono : "123456789"
func saludar():
print(f"¡Hola!")
func caminar(self):
pass
La clase debería quedar de esta forma:
class Persona:
nombre = "Lara"
edad = 67
telefono = "123456789"
def saludar(self):
print(f"¡Hola!")
def caminar(self):
pass
Por cierto, los paréntesis del nombre de la clase son opcionales. Solo son obligatorios si hay herencia de clases.
Podría quedar así también:
class Persona():
O incluso así:
class Persona(Object):
Aunque esto último, es algo que todavía no te he explicado en esta parte del curso.
La clase presentaba los siguientes fallos:
-
Palabra reservada
class
escrita en español. -
El nombre
persona
, no cumple la convención de nombres de clase de Python. -
El operador de asignación para los atributos no es
(
:
). -
Los métodos y las funciones se declaran con la
palabra reservada
def
, no con la palabrafunc
, que no existe en Python como palabra reservada. -
Para evitar errores, todos los métodos deben llevar
al menos el parámetro
self
. - Faltaba la sangría (indentación) de los bloques de código de los dos métodos.
Espacio publicitario