sábado, 5 de dezembro de 2020

Alterando membros de classe em Python

Já sabemos que Python não tem palavra-chave static. Todas as variáveis que recebem um valor na declaração de classe são variáveis de classe.

Devemos ter cuidado ao alterar o valor da variável de uma classe. Se tentarmos mudar a variável de uma classe usando objeto, uma nova variável da instância (ou não estática) para aquele objeto particular é criada e esta variável obscurece as variáveis da classe. Abaixo está o programa Python para demonstrar o mesmo.

# Programa para testar a funcionalidade

# Classe para estudantes de ciência da computação 
class CSStudent:
    stream = 'cse' # Variável da classe
    def __init__(self, name, roll):
        self.name = name
        self.roll = roll

# Criação de objetos da classe CSStudent
a = CSStudent("Geek", 1)
b = CSStudent("Nerd", 2)

print ("Inicialmente")
print ("a.stream =", a.stream)
print ("b.stream =", b.stream)

# Isso não muda a variável da classe
# Em vez disso, cria uma variável de instância para o objeto
# 'a' que sombreia o membro da classe.
a.stream = "ece"

print ("\nDepois de mudar a.stream")
print ("a.stream =", a.stream)
print ("b.stream =", b.stream)

Resultado:

Initially
Inicialmente
a.stream = cse
b.stream = cse

Depois de mudar a.stream
a.stream = ece
b.stream = cse

Devemos alterar as variáveis da classe usando apenas o nome da classe.

# Programa para mostrar como fazer alterações na
# variável da classe em Python

# Classe para estudante de ciência da computação
class CSStudent:
    stream = 'cse' # Variável da classe  
    def __init__(self, name, roll):
        self.name = name
        self.roll = roll

# Novo objeto para implementação posterior
a = CSStudent("check", 3)
print("a.tream =", a.stream)

# Maneira correta de alterar o valor da variável de classe
CSStudent.stream = "mec"
print("\nA variável da classe mudou para mec")

# Novo objeto para implementação posterior
b = CSStudent("carter", 4)

print("\nValor da variável steam para cada objeto")
print("a.stream =", a.stream)
print("b.stream =", b.stream)

Resultado:

a.tream = cse

A variável da classe mudou para mec

Valor da variável steam para cada objeto
a.stream = mec
b.stream = mec

Artigo escrito por Nikhil Kumar Singh e traduzido por Acervo Lima de Changing Class Members in Python

0 comentários:

Postar um comentário