Está en la página 1de 2

Diplomado Python desde Cero Universidad Comunera (UCOM)

PRÁCTICA 7 - Python 3: Encapsulamiento

Podemos proteger los atributos de la clase Cuenta dejándolos como privados.

class Cuenta:

def __init__(self, numero, titular, saldo, limite):


print("Construyendo objeto ... {}".format(self))
self.__numero = numero
self.__titular = titular
self.__saldo = saldo
self.__limite = limite

Python no tiene una palabra clave para hacer que un atributo sea privado, como Java tiene
el modificador de visibilidad private. Sin embargo, posee una nomenclatura especial: los
dos underscore (__). Cuando se usa _, Python cambia el nombre del atributo. Por
ejemplo, __cuenta para a llamarse automáticamente _Cuenta__saldo. De esta forma,
le avisamos al programador que se trata de un atributo privado.

Ahora creamos dos objetos cuenta. Queremos agregar la funcionalidad de transferir un


valor de una cuenta a otra.
>>> cuenta = Cuenta(123, "Nico", 50000, 1000000)
Construyendo objeto ... <cuenta.Cuenta object at 0x10681d588>
>>> cuenta2 = Cuenta(321, "Marco", 100000, 1000000)
Construyendo objeto ... <cuenta.Cuenta object at 0x1065f0940>

Dentro del método transfiere(), pasaremos dos parámetros: self y valor.

def transfiere(self, valor):


cuenta2.retira(valor)
cuenta.deposita(valor)

Renombraremos las referencias:


● El parámetro cuenta2 estará relacionado con el parámetro origen;
● Mientras cuenta, se relacionará con el destino.

def transfiere(self, valor):


origen.retira(valor)
destino.deposita(valor)

Sin embargo, aún no hemos creado las variables de origen y destino. Tendremos que
declararlos dentro del método también.
def transfiere(self, valor, origen, destino):
origen.retira(valor)
destino.deposita(valor)

1
Diplomado Python desde Cero Universidad Comunera (UCOM)

A continuación, ejecutaremos el método transfiere(), utilizando el nombre de la cuenta


y la referencia a cuenta2. Dentro de los paréntesis, pasaremos los valores referentes a los
parámetros self, valor, origen y destino. Definiremos que cuenta2 es origen,
mientras que cuenta será destino. El valor de self no necesita ser incluido.

>>> cuenta2.transfiere(10000, cuenta2, cuenta)


>>> cuenta2.extracto()
Saldo de 90000 del titular Marco

La cantidad que se retira de una cuenta se añade a otra. Logramos crear un código del
método transfiere que funciona bien, pero aún podemos mejorarlo. Si observamos el
fragmento de código: cuenta2.transfiere(10000, cuenta2, cuenta), la
referencia cuenta2 aparece dos veces en la línea ejecutada. Sin embargo, si entendemos
con quién se relaciona cada parámetro, nos daremos cuenta de que tanto self como
origen son cuentas equivalentes a cuenta2. Dado que Python agrega self
automáticamente, eliminaremos el parámetro origen y lo usaremos como referencia antes
de retira().

def transfiere(self, valor, destino):


self.retira(valor)
destino.deposita(valor)

Ahora, en la consola podemos ejecutar:


>>> cuenta2.transfiere(10000, cuenta)

Pudimos dejar nuestra intención de realizar una transferencia a través del método
transfiere(). Hemos encapsulado el código, que se ha agregado en la clase correcta.

También podría gustarte