Articles

Python-Miembros públicos, Protegidos y privados

Los lenguajes clásicos orientados a objetos, como C++ y Java, controlan el acceso a los recursos de clase por palabras clave públicas, privadas y protegidas. A los miembros privados de la clase se les niega el acceso desde el entorno fuera de la clase. Solo se pueden manejar desde dentro de la clase.

Miembros públicos

Los miembros públicos (generalmente métodos declarados en una clase) son accesibles desde fuera de la clase. El objeto de la misma clase es necesario para invocar un método público. Esta disposición de variables de instancia privadas y métodos públicos garantiza el principio de encapsulación de datos.

Todos los miembros de una clase Python son públicos de forma predeterminada. Se puede acceder a cualquier miembro desde fuera del entorno de clase.

Ejemplo: Public Atributos

Copiar

class Student: schoolName = 'XYZ School' # class attribute def __init__(self, name, age): self.name=name # instance attribute self.age=age # instance attribute

Usted puede tener acceso a la etiqueta Student de la clase atributos y también modificar sus valores, como se muestra a continuación.

Ejemplo: Acceder a Miembros públicos

Copiar

>>> std = Student("Steve", 25)>>> std.schoolName'XYZ School'>>> std.name'Steve'>>> std.age = 20>>> std.age25

Miembros protegidos

Los miembros protegidos de una clase son accesibles desde dentro de la clase y también están disponibles para sus subclases. No se permite el acceso a ningún otro entorno. Esto permite que recursos específicos de la clase padre sean heredados por la clase hija.

La convención de Python para proteger una variable de instancia es agregarle un prefijo _ (subrayado único). Esto evita efectivamente que se acceda a él a menos que sea desde una subclase.

Ejemplo: Atributos protegidos

Copy

class Student: _schoolName = 'XYZ School' # protected class attribute def __init__(self, name, age): self._name=name # protected instance attribute self._age=age # protected instance attribute

De hecho, esto no impide que las variables de instancia accedan o modifiquen la instancia. Aún puede realizar las siguientes operaciones:

Ejemplo: Acceder a Miembros protegidos

Copiar

>>> std = Student("Swati", 25)>>> std._name'Swati'>>> std._name = 'Dipa'>>> std._name'Dipa'

Sin embargo, puede definir una propiedad utilizando el decorador de propiedades y hacerla protegida, como se muestra a continuación.

Ejemplo: Atributos protegidos

Copiar

class Student:def __init__(self,name):self._name = name@propertydef name(self):return [email protected] name(self,newname):self._name = newname

Arriba, el decorador @property se utiliza para hacer que el método name() como propiedad y @name.setter decorador a otro sobrecargas del como método de establecimiento de propiedades. Ahora, _name está protegido.

Ejemplo: Acceso a los Miembros Protegidos

Copiar

>>> std = Student("Swati")>>> std.name'Swati'>>> std.name = 'Dipa'>>> std.name'Dipa'>>> std._name # still accessible

Arriba, utilizamos la etiqueta std.name propiedad para modificar _name atributo. Sin embargo, todavía es accesible en Python. Por lo tanto, el programador responsable se abstendría de acceder y modificar variables de instancia con el prefijo _ desde fuera de su clase.

PUBLICIDAD

Miembros privados

Python no tiene ningún mecanismo que restrinja efectivamente el acceso a ninguna variable de instancia o método. Python prescribe una convención de prefijar el nombre de la variable / método con un guion bajo simple o doble para emular el comportamiento de los especificadores de acceso protegido y privado.

El doble guion bajo __ prefijado a una variable la convierte en privada. Da una fuerte sugerencia de no tocarlo desde fuera de la clase. Cualquier intento de hacerlo resultará en un AttributeError:

Ejemplo: Privado Atributos

Copiar

class Student: __schoolName = 'XYZ School' # private class attribute def __init__(self, name, age): self.__name=name # private instance attribute self.__salary=age # private instance attribute def __display(self): # private method print('This is private method.')

Ejemplo:

Copiar

>>> std = Student("Bill", 25)>>> std.__schoolNameAttributeError: 'Student' object has no attribute '__schoolName'>>> std.__nameAttributeError: 'Student' object has no attribute '__name'>>> std.__display()AttributeError: 'Student' object has no attribute '__display'

Python realiza el nombre de destrozarlo de variables privadas. Cada miembro con un doble guion bajo se cambiará a _object._class__variable. Así, todavía se puede acceder desde fuera de la clase, pero en la práctica debe ser evitado.

Ejemplo:

Copy

>>> std = Student("Bill", 25)>>> std._Student__name'Bill'>>> std._Student__name = 'Steve'>>> std._Student__name'Steve'>>> std._Student__display()'This is private method.'

Por lo tanto, Python proporciona implementación conceptual de modificadores de acceso público, protegido y privado, pero no como otros lenguajes como C#, Java, C++.