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

[Dúvida] Explicação de referencia

No codigo exibido:

class Contador:
    '''
    Classe que representa um contador.
    A instância mantém um contador específico, enquanto um contador global é compartilhado por todas as instâncias.
    '''

    contador_global = 0

    def __init__(self):
        self.valor = 0

    def __str__(self):
        return f'Contador: {self.valor}'

    def incrementar(self):
        self.valor += 1

    @classmethod
    def zerar_contador_global(cls):
        cls.contador_global = 0
        return 'Contador global foi zerado.'

segue a seguinte resposta correta: A classe Contador tem um método de instância incrementar que aumenta o valor do contador e um método __str__ para fornecer uma representação em string da instância.

Como o metodo def incrementar(self) está incrementando no contador, sendo que não tem nada referenciando a variavel contador_global?

5 respostas

Nesse caso o metodo incrementar está alterando apenas o self.valor, ou seja o valor do objeto, enquanto o contador__global é compartilhado entre os objetos da classe.

A classe atribui um valor 0 ao contador global mas não altera esse valor em nenhum lugar, pra alterar esse valor seria necessario referenciar o contador diretamente no metodo

exemplo

# Aqui o metodo incrementar alem de incrementar o valor do objeto tambem incrementa o contador__global
def incrementar(self):
    self.valor += 1
    Contador.contador_global += 1  # Incrementa o contador global

Ah, então, quando ele fala: A classe Contador tem um método de instância incrementar que** aumenta o valor do contador**, ele está se referindo ao nome da classe e não a variavel contador_global?

Então, estou certo em falar que no exemplo que informei acima:

class Contador:
    '''
    Classe que representa um contador.
    A instância mantém um contador específico, enquanto um contador global é compartilhado por todas as instâncias.
    '''

    contador_global = 0

    def __init__(self):
        self.valor = 0

    def __str__(self):
        return f'Contador: {self.valor}'

    def incrementar(self):
        self.valor += 1

    @classmethod
    def zerar_contador_global(cls):
        cls.contador_global = 0
        return 'Contador global foi zerado.'

A variavel contador_global não está sendo incrementada?

Alguém poderia me responder?

solução!

Sim você está certo, no seu exemplo o método incrementar incrementa apenas o valor da instancia, não altera o contador_global. No exemplo estavam se referindo a métodos especificos para controlar propriedades da instancia da clasa... ou seja do objeto.