8.9 Continuando Com Atributos

Os atributos de uma classe podem receber um valor padrão - assim como os argumentos de uma função. Nosso banco pode ter um valor de limite padrão para todas as contas e apenas em casos específicos pode atribuir um valor limite diferente.

Para aplicarmos essa regra de negócio, podemos atribuir um valor padrão ao limite, por exemplo, 1000.0 reais:

class Conta:
python
def __init__(self, numero, titular, saldo, limite=1000.0): self.numero = numero
 
self.titular = titular self.saldo = saldo self.limite = limite
 
E podemos inicializar uma conta:
 
conta = Conta('123-4', 'joão', 120.0)
 

Veja que agora não somos obrigados a passar o valor do limite já que ele possui um valor padrão de 1000.0 e podemos acessá-lo pela conta :

print(conta.limite) 1000.0

Quando declaramos as variáveis na classe Conta , aprendemos que podemos atribuir um valor padrão para cada uma delas. Imagine que comecemos a aumentar nossa classe Conta e adicionar nome, sobrenome e cpf do titular da conta. Começaríamos a ter muitos atributos e, se você pensar direito, uma Conta não tem nome, nem sobrenome nem cpf, quem tem esses atributos é um cliente. Assim, podemos criar uma nova classe e fazer uma agregação - agregar um cliente a nossa conta. Portanto, nossa classe Conta tem um Cliente .

O atributos de uma Conta também podem ser referências para outras classes. Suponha a seguinte classe Cliente :

class Cliente:
python
def __init__(self, nome, sobrenome, cpf): self.nome = nome
 
self.sobrenome = sobrenome self.cpf = cpf
 
python
class Conta:
python
def __init__(self, numero, cliente, saldo, limite): self.numero = numero
 
self.titular = cliente self.saldo = saldo self.limite = limite
 

E quando criarmos um Conta , precisamos passar um Cliente como titular :

cliente = Cliente(‘João’, ‘Oliveira’, ‘1111111111-1’) minha_conta = Conta(‘123-4’, cliente, 120.0, 1000.0)

Aqui aconteceu uma atribuição, o valor da variável cliente é copiado para o atributo titular do objeto ao qual minha_conta se refere. Em outras palavras, minha_conta tem uma referência ao mesmo Cliente que cliente se refere, e pode ser acessado através de minha_conta.titular .

Você pode realmente navegar sobre toda estrutura de informação, sempre usando o ponto:

print(minha_conta.titular)‌

#< main .Cliente object at 0x7f83dac31dd8>

Veja que a saída é a referência a um objeto do tipo Cliente , mas podemos acessar seus atributos de uma forma mais direta e até mais elegante:

print(minha_conta.titular.nome) #'João'
python

⬅️ Capítulo Anterior | Próximo Capítulo ➡️