Anatomia da classe: o construtor __init__

Programação orientada a objetos em Python

Alex Yarosh

Content Quality Analyst @ DataCamp

Métodos e atributos

  • Métodos são definições de funções dentro de uma classe
  • self como o primeiro argumento
  • Defina atributos por atribuição
  • Refira-se aos atributos na classe via self.___

   

class MinhaClasse:
    # definição de função na classe
    # primeiro argumento é self
    def meu_metodo1(self, outros_args...):
        # faça coisas aqui

    def meu_metodo2(self, meu_attr):        
        # atributo criado por atribuição
        self.meu_attr = meu_attr
        ...
Programação orientada a objetos em Python

Construtor

  • Adicionar dados ao objeto ao criá-lo?
  • Construtor método __init__() é chamado toda vez que um objeto é criado.
class Cliente:
       def __init__(self, nome):     
        self.nome = nome           # <--- Cria o atributo .nome e define para o parâmetro nome
        print("O método __init__ foi chamado")

cliente = Cliente("Lara de Silva") #<--- __init__ é chamado implicitamente print(cliente.nome)
O método __init__ foi chamado
Lara de Silva
Programação orientada a objetos em Python
class Cliente:
       def __init__(self, nome, saldo):  # <-- parâmetro saldo adicionado

self.nome = nome self.saldo = saldo # <-- atributo saldo adicionado print("O método __init__ foi chamado")
cliente = Cliente("Lara de Silva", 1000) # <-- __init__ é chamado print(cliente.nome) print(cliente.saldo)
O método __init__ foi chamado
Lara de Silva
1000
Programação orientada a objetos em Python
class Cliente:
       def __init__(self, nome, saldo=0):  #<--definir valor padrão para saldo

self.nome = nome self.saldo = saldo print("O método __init__ foi chamado")
cliente = Cliente("Lara de Silva") # <-- não especificar saldo explicitamente
print(cliente.nome) print(cliente.saldo) # <-- atributo é criado de qualquer forma
O método __init__ foi chamado
Lara de Silva
0
Programação orientada a objetos em Python

Atributos em métodos

class MinhaClasse:
    def meu_metodo1(self, attr1):
        self.attr1 = attr1
        ...

    def meu_metodo2(self, attr2):        
        self.attr2 = attr2
        ...
obj = MinhaClasse()
obj.meu_metodo1(val1) # <-- attr1 criado
obj.meu_metodo2(val2) # <-- attr2 criado

Atributos no construtor

class MinhaClasse:
    def __init__(self, attr1, attr2):
        self.attr1 = attr1
        self.attr2 = attr2
        ...

# Todos os atributos são criados obj = MinhaClasse(val1, val2)
  • mais fácil saber todos os atributos
  • atributos são criados quando o objeto é criado
  • código mais utilizável e fácil de manter
Programação orientada a objetos em Python

Melhores práticas

1. Inicialize atributos em __init__()
Programação orientada a objetos em Python

Melhores práticas

1. Inicialize atributos em __init__()
2. Nomeação

CamelCase para classes, lower_snake_case para funções e atributos

Programação orientada a objetos em Python

Melhores práticas

1. Inicialize atributos em __init__()
2. Nomeação

CamelCase para classe, lower_snake_case para funções e atributos

3. Mantenha self como self
class MinhaClasse:
    # Funciona, mas não é recomendado
    def meu_metodo(kitty, attr):
       kitty.attr = attr
Programação orientada a objetos em Python

Melhores práticas

1. Inicialize atributos em __init__()
2. Nomeação

CamelCase para classe, lower_snake_case para funções e atributos

3. self é self
4. Use docstrings
class MinhaClasse:
    """Esta classe não faz nada"""
    pass
Programação orientada a objetos em Python

Vamos praticar!

Programação orientada a objetos em Python

Preparing Video For Download...