Por que é possível chamar um atributo que não foi definido em uma classe em Python?

  attributes, class, oop, python

Sou iniciante na programação e estou estudando POO com python, não sei se isso é um comportamento padrão em POO, mas pelo que tenho estudado, quando coloco o objeto.metodo_ou_atributo deveria chamar algum método ou atributo que foi definido na classe previamente, mas no trecho do código abaixo há a classe Pessoa e dentro dessa classe só está definido o atributo nome. Ao instanciar essa classe p1 = Pessoa("João") o nome "João" vai para o atributo self.nome. Até ai tudo bem.

Mas porque p1.outra_coisa = "Carlos" é aceito, se outra_coisa não esta definido como atributo da classe Pessoa? Estou criando algum atributo temporário no objeto ou algo do tipo? Isso é alguma má pratica que deve ser evitado?

class Pessoa:
    def __init__(self, nome: str):
        self.nome = nome


p1 = Pessoa("João")
p1.outra_coisa = "Carlos"

print(p1.outra_coisa)
print(p1.nome)

Desde já; muito obrigado

Source: Python Questions

LEAVE A COMMENT