4.1 Inicialização
Normalmente, logo após a criação, os objetos ainda não estão prontos para uso. Primeiro, você precisa passar todos os dados necessários: parâmetros de trabalho, valores iniciais, links para outros objetos, etc.
Esse processo é chamado de inicialização e deve ocorrer logo após a criação do objeto.
Suponha que você tenha uma classe Gato (Cat)
e queira definir um nome e idade para ela, isso pode ser feito de várias maneiras:
Inicialização de atributos após a criação do objeto
Neste exemplo, inicialmente é criado:
- um objeto vazio
Cat
. - uma instância da classe
Cat
chamadabarsik
. - em seguida, dois atributos são configurados para o objeto barsik:
name
eage
são adicionados diretamente ao objeto.
class Cat:
pass
# Criação do objeto Cat
barsik = Cat()
# Inicialização de atributos após a criação do objeto
barsik.name = "Barsik"
barsik.age = 5
print(f"Nome do gato: {barsik.name}, idade: {barsik.age}") # Saída: Nome do gato: Barsik, idade: 5
Usando um método para inicializar atributos
Neste exemplo, o método initialize
é usado para inicializar atributos. O objeto Cat
é criado sem um único atributo e, em seguida, o método initialize()
é usado para definir os valores dos atributos.
class Cat:
def initialize(self, name, age):
self.name = name
self.age = age
# Criação do objeto Cat
barsik = Cat()
# Inicialização de atributos através do método
barsik.initialize("Barsik", 5)
print(f"Nome do gato: {barsik.name}, idade: {barsik.age}") # Saída: Nome do gato: Barsik, idade: 5
Usando campos de classe
Neste exemplo, os atributos name
e age
são definidos no nível da classe. Após a criação do objeto barsik
, os atributos são inicializados diretamente.
class Cat:
name = ""
age = 0
# Criação do objeto Cat
barsik = Cat()
# Inicialização de atributos do objeto
barsik.name = "Barsik"
barsik.age = 5
print(f"Nome do gato: {barsik.name}, idade: {barsik.age}") # Saída: Nome do gato: Barsik, idade: 5
Qual método é melhor? Nenhum! O melhor é usar um construtor :)
4.2 Construtor
Construtor — é um método especial que é chamado automaticamente
ao criar um novo objeto de classe. O construtor é usado para inicializar os campos do objeto e pode realizar quaisquer ações iniciais necessárias para configurar o objeto.
Em Python, o construtor é o método chamado __init__
. Aqui estão os principais fatos sobre ele:
-
O método
__init__
— é o construtor em Python. É chamado automaticamente quando uma nova instância da classe é criada. -
__init__
aceita pelo menos um parâmetro —self
, que se refere ao objeto sendo criado. Além disso, outros parâmetros podem ser passados para inicializar os atributos do objeto. -
Dentro do método
__init__
você pode definir valores iniciais dos atributos do objeto usandoself
. - O construtor pode realizar quaisquer ações necessárias para configurar o objeto, como validação de dados de entrada ou estabelecimento de links com outros objetos.
Os parâmetros são passados para o construtor automaticamente, você só precisa especificá-los entre parênteses ao criar o objeto.
Veja como será a inicialização do nosso gato usando o construtor:
class Cat:
def __init__(self, name, age):
self.name = name
self.age = age
# Criação do objeto Cat com nome e idade
barsik = Cat("Barsik", 5)
print(f"Nome do gato: {barsik.name}, idade: {barsik.age}") # Saída: Nome do gato: Barsik, idade: 5
Após a criação de um objeto do tipo Cat
, o método __init__
será chamado automaticamente e três parâmetros serão passados para ele:
- Referência ao objeto barsik no parâmetro
self
- String "Barsik" no parâmetro
name
- Número 5 no parâmetro
age
É elegante e bonito.
Validação de dados
A validação de dados também pode ser realizada no construtor. Afinal, o objetivo do construtor é formar um objeto válido (correto) com o qual você pode continuar trabalhando. Exemplo:
class Cat:
def __init__(self, name, age):
if age < 0:
raise ValueError("A idade não pode ser negativa")
self.name = name
self.age = age
# Criação do objeto Cat com verificação de idade
try:
barsik = Cat("Barsik", -3)
except ValueError as e:
print(e) # Saída: A idade não pode ser negativa
GO TO FULL VERSION