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: 23O 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