Encapsulamento - Atributos Privados/Protegidos:
Um Atributo Privado não pode ser acessado fora da Classe, isto é, este Atributo está disponível apenas dentro da própria Classe.
Para definir um Atributo como privado em uma Classe, usa-se o "_" ou "__" no início do nome do Atributo.
Exemplo:
class teste:
atr1 = "atributo publico"
_atr2 = "atributo privado por convenção"
__atr3 = "atributo privado"
a = teste
print(a.atr1) # 'atributo publico'
print(a._atr2) # 'atributo privado por convenção
print(a.__atr3) # 'ERRO'
print(a._teste__atr3) # atributo privado
--------------------------------------------------------------------
Herança:
É uma forma de criar classes novas a partir de outras Classes.
Python suporta herança simples e herança múltiplas.
Exemplo:
Criação da Classe Quadrado estendendo da Classe Retangulo.
Exemplo:
class Retangulo:
lado_a = None
lado_b = None
def __init__(self, lado_a, lado_b):
self.lado_a = lado_a
self.lado_b = lado_b
print ('Criando uma nova instância retângulo.')
def calcula_area(self):
return self.lado_a * self.lado_b
def calcula_perimetro(self):
return 2 * (self.lado_a + self.lado_b)
class Quadrado(Retangulo):
def __init__(self, lado):
self.lado_a = self.lado_b = lado
obj1= Quadrado(10)
print(dir(obj1)) # ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'calcula_area', 'calcula_perimetro', 'lado_a', 'lado_b']
print(obj1.lado_a, obj1.lado_b) # (10. 10)
print(obj1.calcula_area(), obj1.calcula_perimetro()) # (100, 40)
Com a Herança, a Classe Quadrado tem disponível os atributos e métodos da Classe Retangulo.
--------------------------------------------------------------------
Outra forma de criar a Classe Quadrado: A partir da Classe Quadrado invocamos o método Construtor da Classe Retangulo:
Exemplo:
class Quadrado(Retangulo):
def __init__(self, lado):
Retangulo.__init__(self, lado, lado)
obj2 = Quadrado(10) # Criando uma nova instância retângulo.
print(obj2.lado_a, obj2.lado_b) # (10, 10)
print(obj2.calcula_area(), obj2.calcula_perimetro()) # (100, 40)
--------------------------------------------------------------------
Nenhum comentário:
Postar um comentário