Em Python, class variables (variáveis de classe) permitem que de­sen­vol­ve­do­res es­tru­tu­rem, com mais eficácia, dados com­par­ti­lha­dos entre di­fe­ren­tes ins­tân­cias de uma classe. Quando variáveis de classe são definidas dentro de uma classe, mas fora de qualquer método, essas são re­fle­ti­das a todas as outras ins­tân­cias da mesma classe. Isso garante a con­sis­tên­cia dos dados, além de sim­pli­fi­car processos de gestão, ma­nu­ten­ção e atu­a­li­za­ção.

O que são class variables em Python?

É possível se criar variáveis dentro de uma classe na linguagem de pro­gra­ma­ção Python. Ao contrário de variáveis de instância, es­pe­cí­fi­cas para cada instância de uma classe, variáveis de classe refletem o mesmo valor a todas as ins­tân­cias. Elas costumam ser definidas dentro do cons­tru­tor, estando, portanto, aces­sí­veis a todas as ins­tân­cias de uma mesma classe.

Variáveis de classe têm o papel de armazenar in­for­ma­ções re­le­van­tes para a classe como um todo, ou seja, para todas as ins­tân­cias de uma classe. Qualquer tipo de valor pode ser guardado por classes, como números inteiros, de ponto flutuante, objetos e outros elementos dentro da hi­e­rar­quia de classes. Ainda, você pode usar variáveis de classe para definir métodos ou atributos de classe que são com­par­ti­lha­dos por todas as ins­tân­cias, ação que melhora a fun­ci­o­na­li­dade e a or­ga­ni­za­ção de um código.

Hos­pe­da­gem que se adapta às suas ambições
  • Fique online com 99,99% de tempo de atividade e segurança robusta
  • Aumente o de­sem­pe­nho com um clique à medida que o tráfego cresce
  • Inclui domínio gratuito, SSL, e-mail e suporte 24 horas por dia, 7 dias por semana

Sintaxe de class variables em Python

É simples criar uma variável de classe em Python. O im­por­tante é lembrar que ela deve ser sempre criada dentro da definição da classe, mas fora de qualquer método.

class Car:
    total_cars = 0  # Class variable to track the total number of cars
    def __init__(self, brand, model):
        self.brand = brand  # Instance variable for the car brand
        self.model = model  # Instance variable for the car model
        Car.total_cars += 1  # Increment the total number of cars upon each instantiation
    def display_details(self):
        print(f"Brand: {self.brand}, Model: {self.model}")
# Creating instances of Car
car1 = Car("BMW", "X3")
car2 = Car("Audi", "A4")
# Accessing class variable and instance variables
print(f"Total number of cars: {Car.total_cars}")  # Output: 2
car1.display_details()  # Output: Brand: BMW, Model: X3
car2.display_details()  # Output: Brand: Audi, Model: A4
python

No exemplo acima, definimos a variável de classe total_cars dentro da classe Car, para ve­ri­fi­car­mos o número total de carros. Quando uma nova instância da classe é criada, o cons­tru­tor __init__ é chamado. Em cada ins­tan­ci­a­ção, as variáveis de instância brand e model são definidas e a variável de classe total_cars é in­cre­men­tada em 1.

Quando chamamos o método display_details(), so­li­ci­ta­mos a exibição de detalhes sobre as res­pec­ti­vas ins­tân­cias de carro. Por meio de uma f-string, método de for­ma­ta­ção de strings em Python, con­se­gui­mos acessar a variável de classe total_cars, para a exibição do número total de carros.

Exemplos de aplicação de class variables em Python

Acessos, mo­di­fi­ca­ções e heranças de­sem­pe­nham im­por­tan­tes papeis no ge­ren­ci­a­mento de variáveis de classe. Preste especial atenção a essas pos­si­bi­li­da­des para trabalhar com mais efi­ci­ên­cia.

Acessar variáveis de classe

Class variables, em Python, podem ser acessadas pelo nome da classe seguida do nome da variável. Separe os termos por um ponto final, como mostra o exemplo de código:

class MyClass:
    class_var = "This is a class variable"
# using class name to access class variable
print(MyClass.class_var)  # Output: This is a class variable
# using instance to access class variable
obj = MyClass()
print(obj.class_var)  # Output: This is a class variable
python

Em Python, você pode acessar variáveis de classe em di­fe­ren­tes lugares:

  • No cons­tru­tor (dentro da própria classe): Uma variável de classe pode ser acessada dentro do cons­tru­tor, usando-se tanto a palavra-chave self combinada ao nome da variável, quanto o nome da classe combinado ao nome da variável.
  • Em métodos de instância: Também é possível acessar variáveis de classe dentro de métodos de instância. Para isso, use a palavra-chave self ou o nome da classe.
  • Fora da classe: Fora da classe, você pode acessar uma variável de classe fazendo uso da re­fe­rên­cia do objeto ou do nome da classe.

Modificar variáveis de classe

Class variables podem ser mo­di­fi­ca­das de forma direta, usando-se, para tanto, o nome da classe. No entanto, redobre a sua atenção ao fazer isso: se uma variável de instância tiver o mesmo nome que uma variável de classe, ao tentar modificar a variável por meio da instância, você acabará fazendo com que uma nova variável de instância seja criada. Para piorar, a variável de classe per­ma­ne­cerá inal­te­rada.

class MyClass:
    class_var = "Original class variable"
obj = MyClass()
print(obj.class_var)  # Output: Original class variable
MyClass.class_var = "Modified class variable"
print(obj.class_var)  # Output: Modified class variable
python

No código acima, estamos subs­ti­tuindo a variável de classe class_var, atri­buindo-lhe um novo valor por meio da classe MyClass. A mudança é au­to­ma­ti­ca­mente refletida na instância obj.

Herdar variáveis de classe

Heranças permitem que sub­clas­ses, ou seja, classes derivadas de su­per­clas­ses, possam acessar e utilizar as variáveis de classe da su­per­classe, sem que seja preciso redefini-las uma a uma.

class BaseClass:
    base_var = "Base variable"
class DerivedClass(BaseClass):
    pass
print(DerivedClass.base_var)  # Output: Base variable
python

Neste código de exemplo, definimos a su­per­classe BaseClass, que contém a variável de classe base_var. Já a subclasse DerivedClass é herdeira da su­per­classe BaseClass. Por meio da herança, DerivedClass pode acessar e utilizar a variável de classe base_var (da su­per­classe), sem que re­de­fi­ni­ções sejam ne­ces­sá­rias.

Ir para o menu principal