Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Atributo da classe /atributo de instância

Em uma aplicação de gestão de estoque, decidi criar o atributo id_produto, e gostaria que todos os produtos no estoque tivessem um prefixo X. Então pensei em definir um atributo de classe de nome (prefixo_id). Existe alguma forma de incluir o atributo de classe (prefixo_id) dentro do __init __ para que ele seja comum a todos os produtos?

algo como:

class Produto:

    prefixo_id =  11

    def __init__(self,  id_produto)
    # aqui, incluir o prefixo de alguma forma #
    self.id_produto =  prefixo_id + id_produto

p1 = Produto(1234)

Assim, quando eu der um get na id do produto quero que me retorne algo como:

11-1234

Espero que tenha conseguido deixar claro,,, :)

2 respostas
solução!

E aí, Pedro. Beleza?

Você pode fazer algo bem na linha do que você descreveu mesmo:

class Produto:
    prefixo = 11

    def __init__(self, product_id):
        self.product_id = f"{str(self.prefixo)}-{str(product_id)}"

    def get_product_id(self):
        return self.product_id

    def set_product_id(self, new_product_id):
        self.product_id = f"{str(self.prefixo)}-{str(new_product_id)}"

Os atributos de classe vão entrar como se fossem passados dentro do construtor e, para serem acessados, precisam ser chamados com o self.

Essa forma de interpolação com f"string {parametro}" é só mais uma das várias possíveis que vão servir pra você aqui.

Pode ser interessante usar getters e setters para restringir um pouco do acesso sobre os atributos das instâncias em vez de chamar os atributos com instancia.atributo porque dessa forma fica mais fácil cometer erros ao fazer operações com os atributos.

Pode rodar essas linhas aqui pra testar:

prod1 = Produto(1234)
print(prod1.get_product_id())
print(prod1.product_id)

print(prod1.get_product_id())
prod1.set_product_id(5678)
print(prod1.get_product_id())

Espero que tenha dado uma luz aí.

Abraço

opa, entendi Leonel. Valeu brother !