Mesmo ter terminado o módulo de Encapsulamento, ainda não entendi bem o que seria o conceito da palavra, gostaria de uma breve explicação
Mesmo ter terminado o módulo de Encapsulamento, ainda não entendi bem o que seria o conceito da palavra, gostaria de uma breve explicação
Uma parte importante da programação orientada ao objeto é o recurso de encapsulamento. Esse recurso envolve agrupar métodos e atributos em pacotes que contém diferentes formas de acesso. Por exemplo, certos métodos e atributos são empacotados como públicos e podem ser acessados por qualquer classe outros pacotes vão ter alguma restrição de acesso – os métodos e atributos só poderão ser acessadas por uma classe filha ou nenhuma outra classe pode acessar.
Tal abordagem permite o programador criar de forma fácil um interface de aplicação para as classes e também para que elas possam esconder os métodos que são utilizados para o próprio funcionamento. Por exemplo, os métodos utilizados para o funcionamento da classe são definido como privados e os métodos que devem ser utilizados por classes mais complexas são definidos como públicos. Temos que lembrar que o esforço principal do paradigma de programação orientada ao objeto é o de organizar o código e o recurso de encapsulamento está alinhado nesse esforço. Porém no Python não existe modificadores de acesso, dependendo do programador não USÁ-LO.
Em resumo, Encapsulamento é a proteção dos atributos ou métodos de uma classe, em Python existem somente o public e o private e eles são definidos no próprio nome do atributo ou método.
Atributos ou métodos iniciados por no máximo dois sublinhados e terminados por um sublinhado são privados e todas as outras formas são públicas.
Exemplo:
class A:
a = 1 # atributo publico
__b = 2 # atributo privado a class A
class B(A):
__c = 3 # atributo privado a B
def __init__(self):
print(self.a)
print(self.__c)
a = A()
print(a.a) # imprime 1
b = B()
### sdout
>>> print(b.__b) # Erro, pois __b é privado a classe A.
Traceback (most recent call last):
File "<pyshell>", line 1, in <module>
AttributeError: 'B' object has no attribute '__b'
>>> print(b.__c) # Erro, __c é um atributo privado, somente chamado pela classe.
Traceback (most recent call last):
File "<pyshell>", line 1, in <module>
AttributeError: 'B' object has no attribute '__c'
>>> print(b._B__c) # Imprime __c = 3, muito pouco utilizada, mas existe.
3
>>>