Anatomia da classe: o construtor __init__

Introdução à programação orientada a objetos em Python

George Boorman

Curriculum Manager, DataCamp

Métodos e atributos

  • Métodos são definições de função dentro de uma classe
  • self como primeiro argumento
  • Defina atributos por atribuição
  • Referencie atributos na classe via self.___
  • Chamar muitos métodos pode ficar inviável!
class MyClass:
    # definição de função na classe
    # primeiro argumento é self
    def my_method1(self, other_args...):
        # faça coisas aqui

def my_method2(self, my_attr): # atributo criado por atribuição self.my_attr = my_attr ...
Introdução à programação orientada a objetos em Python

Construtor

  • Adicione dados ao objeto ao criá-lo
  • O método de construtor __init__() é chamado toda vez que um objeto é criado
    • Chamado automaticamente por causa da sintaxe __methodname__
class Customer:
    def __init__(self, name):
        # Crie o atributo .name e defina como o parâmetro name
        self.name = name
        print("The __init__ method was called")
Introdução à programação orientada a objetos em Python

Construtor

# __init__ é chamado implicitamente 
cust = Customer("Lara de Silva")   
print(cust.name)
The __init__ method was called
Lara de Silva
Introdução à programação orientada a objetos em Python

Atributos em métodos

class MyClass:
    def my_method1(self, attr1):
        self.attr1 = attr1
        ...

    def my_method2(self, attr2):        
        self.attr2 = attr2
        ...

obj = MyClass() # attr1 criado obj.my_method1(val1) # attr2 criado obj.my_method2(val2)

Atributos no construtor

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

# Todos os atributos são criados obj = MyClass(val1, val2)
  • Em geral, devemos usar o construtor
  • Os atributos são criados quando o objeto é criado
  • Código mais fácil de usar e manter
Introdução à programação orientada a objetos em Python

Adicionar argumentos

class Customer:
    # Adicione o argumento balance
    def __init__(self, name, balance): 

self.name = name # Adicione o atributo balance self.balance = balance print("The __init__ method was called")
Introdução à programação orientada a objetos em Python

Adicionar parâmetros

# __init__ é chamado
cust = Customer("Lara de Silva", 1000)
print(cust.name)
print(cust.balance)
The __init__ method was called
Lara de Silva
1000
Introdução à programação orientada a objetos em Python

Argumentos padrão

class Customer:
    # Defina um valor padrão para balance
    def __init__(self, name, balance=0):
        self.name = name
        # Atribua o novo atributo
        self.balance = balance
        print("The __init__ method was called")
Introdução à programação orientada a objetos em Python

Argumentos padrão

# Não especifique balance explicitamente
cust = Customer("Lara de Silva")

print(cust.name) # O atributo balance é criado mesmo assim print(cust.balance)
The __init__ method was called
Lara de Silva
0
Introdução à programação orientada a objetos em Python

Boas práticas

1. Inicialize atributos em __init__()
Introdução à programação orientada a objetos em Python

Boas práticas

1. Inicialize atributos em __init__()
2. Nomes

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

Introdução à programação orientada a objetos em Python

Boas práticas

1. Inicialize atributos em __init__()
2. Nomes

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

3. Mantenha self como self
class MyClass:
    # Funciona, mas não é recomendado
    def my_method(george, attr):
        george.attr = attr
Introdução à programação orientada a objetos em Python

Boas práticas

1. Inicialize atributos em __init__()
2. Nomes

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

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

Vamos praticar!

Introdução à programação orientada a objetos em Python

Preparing Video For Download...