# Kuidas luua ja kasutada Python klassi muutujaid

Pythoni klassi muutujad on struktureeritud viis andmete jagamiseks klassi erinevate instantside vahel. Kui teete **muudatusi klassi muutujas**, mõjutab see kõiki klassi instantsi. See tähendab, et te ei pea neid iga kord uuesti määratlema, kui need instantsitakse.

## Mis on Pythoni klassi muutujad?

Pythonis loome klassi muutujad klassi sees. Erinevalt instantsi muutujatest, mis on spetsiifilised iga klassi instantsi jaoks, **säilitavad klassi muutujad sama väärtuse kõikide instantside jaoks**. Klassimuutujad seatakse tavaliselt enne konstruktorit ja neile on juurdepääs igal klassi instantsil.

Pythoni klassi muutujad on kasulikud klassi kõikidele instantsidele kehtivate **andmete**, näiteks konfiguratsiooniseadete, vaikimisi väärtuste või klassihierarhia ühiste seisundite salvestamiseks. Klassimuutujad võimaldavad teil määratleda ka klassimeetodeid või atribuute, millele iga instants pääseb ligi, parandades nii koodi funktsionaalsust kui ka struktuuri.

## Mis on Python klassi muutujate süntaks?

Pythoni klassi muutujad luuakse **klassi määratluses** ja meetodite väljaspool.

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

Klassis `Car` määratleme klassimuutuja `total_cars`, et jälgida autode koguarvu. Konstruktor `__init__` kutsutakse välja, kui luuakse klassi uus instants. Iga instantsi loomisel määratakse **instantsimuutujad** `brand` ja `model` ning klassimuutuja `total_cars` suurendatakse 1 võrra.

Meetodit `display_details()` kutsudes saame kuvada vastavate autoinstantside üksikasjad. **F-stringis**, mis on Pythoni stringi vormingumeetod, saame juurdepääsu klassi muutujale `total_cars`, et kuvada loodud autode koguarv.

## Näited Python klassi muutujate kasutamise kohta

Juurdepääs, muutmine ja pärimine mängivad olulist rolli klassi muutujate turvalises käsitlemises Pythonis.

### Klassi muutujatele juurdepääs

Python klassi muutujatele pääseb ligi **klassi nime või instantsi kaudu**, millele järgneb punkt ja muutuja nimi.

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

Pythonis on klassi muutujatele juurdepääs mitmes kohas:

- **Konstruktoris**: Konstruktoris saab klassi muutujat kutsuda kas märksõna `self` või klassi nime abil.
- **Instantsimeetodites**: klassi muutujat saab instantsimeetodites kutsuda kas märksõna `self` või klassi nime abil.
- **Klassist väljaspool**: Klassimuutujale pääseb juurde klassist väljaspool objekti viite või klassi nime abil.

### Klassi muutujate muutmine

Pythoni klassi muutujaid saab muuta otse klassi nime kaudu. Kui aga instantsi muutuja on sama nimega kui klassi muutuja ja proovite muutujat instantsi kaudu muuta, **luuakse uus instantsi muutuja** ja klassi muutuja jääb muutumatuks.

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

Selles näites kirjutasime klassi muutuja `class_var` üle, omistades sellele uue väärtuse klassi `MyClass` abil. Muudatus võetakse seejärel automaatselt kasutusele instantsis `obj`.

### Klassi muutujad ja pärimine

Pärimine võimaldab tuletatud klassidel **pääseda ligi** baaskassi klassi muutujatele ja neid kasutada, ilma et neid oleks vaja uuesti määratleda.

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

Siin määratleme baaskassi `BaseClass`, mis sisaldab klassimuutujat `base_var`. Tuletatud klass `DerivedClass` pärineb klassist `BaseClass`. Pärimise kaudu saab `DerivedClass` juurdepääsu baaskassi klassimuutujale `base_var` ja kasutada seda ilma seda ümber määratlemata.


This is a markdown version of: [https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/pythoni-klassi-muutujad/](https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/pythoni-klassi-muutujad/) for AI/LLM consumption.