# Python class variables: Tudo sobre variáveis de classe

Em Python, class variables (variáveis de classe) permitem que desenvolvedores estruturem, com mais eficácia, dados compartilhados entre diferentes instâncias de uma classe. Quando variáveis de classe são definidas dentro de uma classe, mas fora de qualquer método, essas são **refletidas a todas as outras instâncias da mesma classe**. Isso garante a consistência dos dados, além de simplificar processos de gestão, manutenção e atualização.

## O que são class variables em Python?

É possível se criar variáveis dentro de uma classe na linguagem de programação Python. Ao contrário de variáveis de instância, específicas para cada instância de uma classe, **variáveis de classe refletem o mesmo valor a todas as instâncias**. Elas costumam ser definidas dentro do construtor, estando, portanto, acessíveis a todas as instâncias de uma mesma classe.

Variáveis de classe têm o papel de **armazenar informações relevantes para a classe como um todo**, ou seja, para todas as instâncias 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 hierarquia de classes. Ainda, você pode usar variáveis de classe para definir métodos ou atributos de classe que são compartilhados por todas as instâncias, ação que melhora a funcionalidade e a organização de um código.

## Sintaxe de class variables em Python

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

```python
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
```

No exemplo acima, definimos a variável de classe `total_cars` dentro da classe `Car`, para verificarmos o número total de carros. Quando uma nova instância da classe é criada, o construtor `__init__` é chamado. Em cada instanciação, as **variáveis de instância** `brand` e `model` são definidas e a variável de classe `total_cars` é incrementada em 1.

Quando chamamos o método `display_details()`, solicitamos a exibição de detalhes sobre as respectivas instâncias de carro. Por meio de uma **f-string**, método de [formatação de strings em Python](https://www.ionos.com/digitalguide/websites/web-development/python-string-format/ "Formatação de string em Python"), conseguimos 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, modificações e heranças desempenham importantes papeis no gerenciamento de variáveis de classe. Preste especial atenção a essas possibilidades para trabalhar com mais eficiência.

### 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:

```python
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
```

Em Python, você pode acessar variáveis de classe em diferentes lugares:

- **No construtor** (dentro da própria classe): Uma variável de classe pode ser acessada dentro do construtor, 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 referência do objeto ou do nome da classe.

### Modificar variáveis de classe

Class variables podem ser modificadas 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 permanecerá inalterada.

```python
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
```

No código acima, estamos substituindo a variável de classe `class_var`, atribuindo-lhe um novo valor por meio da classe `MyClass`. A mudança é automaticamente refletida na instância `obj`.

### Herdar variáveis de classe

Heranças permitem que subclasses, ou seja, classes derivadas de superclasses, possam **acessar e utilizar as variáveis de classe** da superclasse, sem que seja preciso redefini-las uma a uma.

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

Neste código de exemplo, definimos a superclasse `BaseClass`, que contém a variável de classe `base_var`. Já a subclasse `DerivedClass` é herdeira da superclasse `BaseClass`. Por meio da herança, `DerivedClass` pode acessar e utilizar a variável de classe `base_var` (da superclasse), sem que redefinições sejam necessárias.


This is a markdown version of: [https://www.ionos.com/pt-br/digitalguide/sites-de-internet/desenvolvimento-web/python-class-variables/](https://www.ionos.com/pt-br/digitalguide/sites-de-internet/desenvolvimento-web/python-class-variables/) for AI/LLM consumption.