Porque o professor não deixou os métodos privados aqui? colocando __
Porque o professor não deixou os métodos privados aqui? colocando __
Olá Marconi, como você está?
Peço desculpas pela demora em obter um retorno.
Como tanto o método saca, quanto o método transfere, não serão utilizados diretamente fora da classe, o instrutor poderia sim ter colocado-os como privado.
Mas, o encapsulamento tanto de métodos, quanto de atributos no Python, é um assunto que desperta diversas opiniões e isso, por não ser algo obrigatório da linguagem - embora, seja extremamente importante definir a visibilidade de métodos e atributos quando se trabalha com orientação a objetos.
Vale ressaltar que ao utilizar o duplo underscore em métodos, as classes filhas, não herdarão esses métodos, como mostro abaixo:
class Animal:
def __init__(self, tipo):
self.tipo = tipo
def __tipo_comunicacao(self, som):
return som
def comida_preferida(self, comida):
return f"A comida preferida é {comida}"
class Gato(Animal):
pass
garfield = Gato("Siamês")
garfield.comida_preferida("Ração")
garfield.__tipo_comunicacao("miau miau")
Erro gerado:
AttributeError: 'Gato' object has no attribute '__tipo_comunicacao'
Também, é importante que não será possível invocar métodos que possuam duplo underscore fora da classe (através de objetos) e isso ocorre devido ao name mangling, que se trata de uma mudança no nome do método ou atributo para dificultar a leitura direta. Mas, reforço que apesar de dificultar, seu acesso não é impossível.
Para entender mais sobre atributos, métodos privados e até mesmo sobre name mangling, recomendo a leitura dos seguintes artigos - que estão em inglês, mas ao utilizar o recurso de tradução do próprio navegador, é possível compreender:
Em caso de dúvidas, encontro-me à disposição.
Abraços e bons estudos.