A continuación mostramos los elementos típicos de una clase en Python:
Por ejemplo, así definiríamos una clase Persona
que almacene los datos de personas, como su nombre, edad o teléfono:
class Persona:
# Constructor
def __init__(self, n, e, t):
self.nombre = n
self.edad = e
self.telefono = t
# Otro método de ejemplo
def mostrar(self):
print(self.nombre)
Notar que el constructor tiene una nomenclatura especial: se define un método llamado __init__
con los parámetros correspondientes. Luego veremos cómo se instancian objetos de la clase.
La partícula self
en Python es equivalente a la partícula this
de otros lenguajes, y se emplea para hacer referencia a los elementos propios de la clase. Es una partícula que debe pasarse como primer parámetro en cada método que necesite acceder a algo de la clase (por ejemplo, a sus atributos), para poderlos referenciar desde dentro del código de ese método. Podemos verlo como ejemplo en el constructor y el método mostrar
del ejemplo anterior.
Para crear objetos de una clase, empleamos el nombre de la clase y le pasamos entre paréntesis los parámetros del constructor (omitiendo el primero, si es self
). Esto llamará internamente al método __init__
que hemos definido. En el ejemplo anterior, podríamos crear personas así:
p1 = Persona("María", 52, "677889900")
print(p1.nombre) // María
p1.mostrar()
En Python todos los elementos de una clase son públicos por defecto, y accesibles desde fuera. Si queremos hacerlos privados, su nombre debe comenzar con el carácter de subrayado _
. En este caso, se suelen definir unos métodos públicos especiales, típicamente llamados getters y setters, para acceder a esos elementos privados. Los getters se definen con la anotación @property
y los setters con la anotación @setter
, especificando el atributo que modifican.
Nuestra clase anterior quedaría así empleando atributos privados con sus getters y setters:
class Persona:
# Constructor
def __init__(self, n, e, t):
self._nombre = n
self._edad = e
self._telefono = t
# Otro método de ejemplo
def mostrar(self):
print(self._nombre)
# Getters
@property
def nombre(self):
return self._nombre
@property
def edad(self):
return self._edad
@property
def telefono(self):
return self._telefono
# Setters
@nombre.setter
def nombre(self, n):
self._nombre = n
@edad.setter
def edad(self, e):
if e >= 0:
self._edad = e
@telefono.setter
def telefono(self, t):
self._telefono = t
A la hora de acceder a la información, utilizamos estos elementos públicos:
p1 = Persona("María", 52, "677889900")
p1.edad = 30
print(p1.edad)