Articles

Python-público, Protegido, membros privados

linguagens clássicas orientadas a objetos, tais como C++ e Java, controlam o acesso a recursos de classe por palavras-chave públicas, privadas e protegidas. Os membros privados da classe são impedidos de ter acesso do ambiente fora da classe. Eles podem ser manuseados apenas a partir de dentro da classe.

os membros públicos

os membros públicos (geralmente os métodos declarados numa classe) são acessíveis a partir de fora da classe. O objeto da mesma classe é obrigado a invocar um método público. Esta disposição de variáveis de instância privada e métodos públicos garante o princípio da encapsulação de dados.

Todos os membros de uma classe Python são públicos por padrão. Qualquer membro pode ser acessado de fora do ambiente de classe.

Exemplo: 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

Você pode acessar o Student classe de atributos e também modificar os seus valores, como mostrado abaixo.

exemplo: Acesso aos membros públicos

cópia

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

membros protegidos

membros protegidos de uma classe são acessíveis dentro da classe e também estão disponíveis para as suas subcategorias. Nenhum outro ambiente pode ter acesso a ele. Isto permite que recursos específicos da classe-mãe sejam herdados pela classe-criança.

A Convenção de Python para fazer uma variável de instância protegida é adicionar um prefixo _ (sublinhado único) a ele. Isso efetivamente impede que ele seja acessado a menos que seja de dentro de uma sub-classe.

exemplo: 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

na verdade, isto não impede que variáveis de instância acedam ou modifiquem a instância. Você ainda pode executar as seguintes operações:

Exemplo: Acesso Protegido Membros

Copiar

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

no Entanto, você pode definir uma propriedade usando a propriedade de decoração e torná-lo protegido, como mostrado abaixo.

exemplo: Protegido Atributos

Copiar

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

Acima, @propriedade decorador é usado para fazer o name() método como propriedade e @name.setter decorador para outro sobrecargas de name() método como propriedade método setter. Agora, _name está protegido.

Exemplo: Acesso Protegido Membros

Copiar

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

Acima, usamos std.name propriedade para modificar _name atributo. No entanto, ainda é acessível em Python. Assim, o programador responsável se absteria de acessar e modificar variáveis de instância prefixadas com _ de fora de sua classe.

ublicidade

membros privados

Python não tem nenhum mecanismo que restringe o acesso a qualquer variável ou método de instância. Python prescreve uma convenção de prefixação do nome da variável/método com um sublinhado simples ou duplo para emular o comportamento dos especificadores de acesso protegido e privado.

O duplo sublinhado __ prefixado a uma variável torna-o privado. Ele dá uma forte sugestão para não tocá-lo de fora da classe. Qualquer tentativa de fazer isso irá resultar em um AttributeError:

Exemplo: Private 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.')

Exemplo:

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 desconfiguração do nome de variáveis privadas. Cada membro com um duplo sublinhado será alterado para _object._class__variable. Então, ele ainda pode ser acessado de fora da classe, mas a prática deve ser refinada.

Exemplo:

Copiar

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

Assim, Python oferece conceitual implementação de public, protected e private modificadores de acesso, mas não é como as outras linguagens como C#, Java, C++.