As variáveis de classe em Python re­pre­sen­tam uma forma es­tru­tu­rada de partilhar dados entre di­fe­ren­tes ins­tân­cias de uma classe. Além disso, as al­te­ra­ções numa variável de classe afetam todas as ins­tân­cias da classe, pelo que não é ne­ces­sá­rio redefini-las sempre que são ins­tan­ci­a­das.

O que são variáveis de classe em Python?

As variáveis de classe em Python são criadas dentro de uma classe. Ao contrário das variáveis de instância, que são es­pe­cí­fi­cas para cada instância de uma classe, as variáveis de classe mantêm o mesmo valor para todas as ins­tân­cias. Como regra geral, essas variáveis são definidas antes do cons­tru­tor e todas as ins­tân­cias da classe podem aceder a elas.

As variáveis de classe são fre­quen­te­mente uti­li­za­das para armazenar in­for­ma­ções comuns a todas as ins­tân­cias de uma classe, como valores de con­fi­gu­ra­ção, valores padrão ou estados comuns dentro de uma hi­e­rar­quia de classes. Também pode utilizar essas variáveis para definir métodos ou atributos de classe par­ti­lha­dos por todas as ins­tân­cias de uma classe, o que melhora a fun­ci­o­na­li­dade e a or­ga­ni­za­ção do código.

Qual é a sintaxe das variáveis de classe em Python?

As variáveis de classe em Python são criadas dentro da definição da classe, mas fora de qualquer método dentro dessa classe.

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

Dentro da classe Car (carro), define-se a variável de classe total_cars para obter o número total de carros. Sempre que uma nova instância da classe é criada, o cons­tru­tor __init__ é chamado. Em cada instância, as variáveis de instância brand (marca) e model (modelo) são definidas, e a variável de classe total_cars (total de carros) é in­cre­men­tada em 1 para refletir a adição de um novo carro ao total.

Além disso, no exemplo, o método display_details() é chamado para mostrar os detalhes de cada instância de carro. Para aceder à variável de classe total_cars e obter o número total de carros criados, deve-se usar uma f-string, que é um método de for­ma­ta­ção de string, também chamado de Python string format.

Exemplos de uti­li­za­ção das variáveis de classe em Python

Para lidar com variáveis de classe em Python de forma segura, é im­por­tante entender como aceder a elas, modificá-las e como elas interagem com a herança.

Aceder a variáveis de classe

Pode aceder às variáveis de classe em Python uti­li­zando o nome da classe ou uma instância, seguido de um ponto e do nome da variável.

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

Ao programar em Python, pode aceder às variáveis de classe em di­fe­ren­tes locais:

  • Dentro do cons­tru­tor da classe, es­cre­vendo a palavra-chave self ou o nome da classe.
  • Dentro dos métodos de instância da mesma forma que no caso anterior, ou seja, uti­li­zando self ou o nome da classe.
  • Fora da classe, uti­li­zando a re­fe­rên­cia ao objeto ou o nome da classe.

Modificar variáveis de classe

É possível modificar as variáveis de classe em Python uti­li­zando di­re­ta­mente o nome da classe. No entanto, se uma variável de instância tiver o mesmo nome que uma variável de classe e tentar modificá-la através da instância, será criada uma nova variável de instância e 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

Neste exemplo, so­bres­cre­ve­mos a variável de classe class_var atri­buindo-lhe um novo valor através da classe MyClass, e a instância obj é au­to­ma­ti­ca­mente atu­a­li­zada para refletir essa alteração.

Variáveis de classe e herança

Graças à herança, as classes derivadas podem aceder às variáveis de classe da classe base e utilizá-las sem ter de as redefinir.

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

No exemplo anterior, é definida uma classe base BaseClass que contém a variável de classe base_var. A classe derivada DerivedClass herda da BaseClass. Graças à herança, DerivedClass pode aceder à variável de classe base_var da classe base e utilizá-la sem ter de a redefinir.

Ir para o menu principal