Superclasse object em Python
A partir da versão 3 da linguagem de programação Python, todos os classes possuem implicitamente um superclasse comum, o object
, herdando seus métodos por padrão.
Um dos métodos mais utilizados da classe object
é o método __str__()
. Quando é necessário obter uma representação em string de um objeto ou exibir o objeto como uma string, Python chama automaticamente este método. Assim, é uma boa prática sobrescrever este método ao definir uma nova classe.
Por exemplo, vamos criar uma classe Person
e exibir sua representação em string:
class Person:
def __init__(self, name, age):
self.name = name # define o nome
self.age = age # define a idade
def display_info(self):
print(f"Name: {self.name} Age: {self.age}")
tom = Person("Tom", 23)
print(tom)
Ao executar o programa, o resultado será algo como:
<__main__.Person object at 0x7f8b1c1b3b50>
Essa saída não é muito informativa sobre o objeto. Podemos, claro, contornar isso definindo um método adicional na classe Person
para exibir os dados do objeto: no exemplo acima, este é o método display_info
.
No entanto, há uma alternativa mais prática: podemos definir o método __str__()
diretamente na classe Person
:
class Person:
def __init__(self, name, age):
self.name = name # define o nome
self.age = age # define a idade
def display_info(self):
print(self)
# print(self.__str__()) # ou desta forma
def __str__(self):
return f"Name: {self.name} Age: {self.age}"
tom = Person("Tom", 23)
print(tom) # Saída: Name: Tom Age: 23
tom.display_info() # Saída: Name: Tom Age: 23
O método __str__
deve retornar uma string. Neste caso, estamos retornando informações básicas sobre a pessoa. Se precisarmos usar essa informação em outros métodos da classe, podemos usar a expressão self.__str__()
.
Agora, o resultado no console será mais informativo:
Name: Tom Age: 23 Name: Tom Age: 23