Programação Orientada à Objetos (POO) em Python
Classes
Para criar uma classe:
class Nome_Classe:
# construtor da classe
def __init__(self, parametro1, parametro2):
self.atributo1 = ‘X’
self.atributo2 = 10
self.atributo3 = parametro1
self.atributo4 = parametro2
self.atributo5 = self.calcula_atributo5()
def calcula_atributo5(self):
return 1 + 2
Caso você não esteja familiarizado com o termo, um construtor é um método que é executado sempre que um novo objeto daquela classe é criado. Além de servir para inicializar os atributos, ele também é usado para garantir que determinados parâmetros obrigatórios sejam necessariamente informados para que a classe seja criada.
Note que nos dois métodos, o primeiro argumento é o self. Ele é um parâmetro obrigatório em todos os métodos das classes que é utilizado para acessar atributos e métodos da instância da própria classe.
Para instanciar uma classe:
print(nome_classe.atributo1) # é possível acessar diretamente os atributos
nome_classe.atributo2 = 20 # também é possível alterar os valores, o que nem sempre é bom
Variáveis que representam objetos armazenam a referência daquele objeto. Isso significa que se você passar o valor de uma variável para outra, as duas irão representar o mesmo objeto:
variavel1.nome = ‘Ana’
variavel2 = variavel1
variavel2.nome = ‘Bruna’
print(variavel1.nome) # ‘Bruna’
print(variavel2.nome) # ‘Bruna’
Outra forma de ver isso é quando passamos parâmetros com valores simples (como números) e quando passamos referências à objetos.
Exemplo:
saldo += 10
def muda_saldo2(obj):
obj.saldo += 10
obj1 = Objeto()
obj1.saldo = 100
muda_saldo(obj1.saldo) # passa uma cópia do valor da variável saldo
print(obj1.saldo) # irá exibir 100
muda_saldo2(obj1) # passa a referência do objeto
print(obj1.saldo) # irá exibir 110
Herança
A herança consiste em definir que uma classe herda os atributos e métodos de outra classe. Isso é útil quando temos classes com comportamentos similares, mas algumas diferenças.
Por exemplo, tanto um vendedor quanto um gerente são funcionários de uma empresa. Portanto, ambos têm características em comum, como nome, documento de identificação, matrícula na empresa, etc. Por outro lado, o cálculo de participação nos lucros, por exemplo, é diferente. Para esse tipo de situação, podemos criar uma classe Funcionário, que irá conter os atributos e métodos que qualquer funcionário deve possuir, e, para cada cargo específico, criamos uma classe com suas respectivas peculiaridades.
Para definir que uma classe herda de outra:
…
Podemos chamar o construtor da classe mãe no construtor da classe filha:
def __init__(self, name):
self.name = name
class Filha(Mae):
def __init__(self, name):
super().__init__(name)
Os atributos e métodos definidos na classe mãe podem ser acessados nas classes filhas usando o operador self. Quando um método existe em ambas as classes, podemos especificar que queremos usar o método da classe mãe usando o operador super().
Exemplo:
def __init__(self, salario):
self.salario = salario
def get_salario(self):
return self.salario
def calcula(self):
return self.salario * 0.15
class Y(X):
def __init(self, salario):
super().__init__(salario)
def calcula(self):
return super.calcula() #Está retornando o método calcula da classe X usando o operador super()
def calcula_especifico(self):
return self.get_salario() * 0.1 #Está acessando o atributo da classe mãe usando o operador self
Comentários
Postar um comentário