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.0Quando 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