Update Python Ofensivo
This commit is contained in:
1 parent
8896ac39c2
commit
ab95e6f805
14 files changed
+70
No files matched your search
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -0,0 +1,39 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Encapsulamiento y métodos especiales
|
||||
|
||||
Hay un convenio que se utiliza en Python para indicar que un atributo
|
||||
o método es privado o protegido. No se debería usar fuera de la clase.
|
||||
Atributo protegido
|
||||
self._dinero
|
||||
|
||||
Atributo privado:
|
||||
self.__dinero
|
||||
|
||||
Esto activa un mecanismo de cambio de nombre conocido como ‘name mangling‘,
|
||||
donde el intérprete de Python altera internamente el nombre del atributo
|
||||
para hacer más difícil su acceso desde fuera de la clase.
|
||||
|
||||
Para extraerlo hay que poner el nombre de la clase delante del atributo
|
||||
self._Ejemplo__dinero
|
||||
|
||||
"""
|
||||
|
||||
|
||||
class Ejemplo:
|
||||
|
||||
def __init__(self):
|
||||
|
||||
# Atributo protegido
|
||||
self._atributo_protegido = "Soy un atributo protegido y no deberías poder verme"
|
||||
|
||||
# Atributo privado
|
||||
|
||||
self.__atributo_privado = "Soy un atributo privado, inalcanzable desde fuera de la clase"
|
||||
|
||||
|
||||
ejemplo = Ejemplo()
|
||||
|
||||
print(ejemplo._atributo_protegido) # Acceso al atributo protegido
|
||||
print(ejemplo._Ejemplo__atributo_privado) # Acceso al atributo privado
|
||||
print(ejemplo.__atributo_privado) # Error
|
||||
@@ -0,0 +1,31 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Atributo privado
|
||||
"""
|
||||
|
||||
|
||||
class Coche:
|
||||
|
||||
def __init__(self, marca, modelo):
|
||||
self.marca = marca
|
||||
self.modelo = modelo
|
||||
self.__kilometraje = 0 # Atributo privado
|
||||
|
||||
def conducir(self, km):
|
||||
|
||||
if km >= 0:
|
||||
self.__kilometraje += km
|
||||
else:
|
||||
print("\n[!] Los kilometros deben ser mayores de 0\n")
|
||||
|
||||
def mostrar_kilometraje(self):
|
||||
return self.__kilometraje
|
||||
|
||||
|
||||
coche = Coche("Toyota", "Corolla")
|
||||
coche.conducir(150)
|
||||
|
||||
# Esto no se hace, te matan los desarrolladores
|
||||
print(coche._Coche__kilometraje)
|
||||
|
||||
print(coche.mostrar_kilometraje()) # El convenio especifica que se haga así
|
||||
Reference in new issue
Block a user