# Kako ustvariti in uporabljati spremenljivke razreda Python

Spremenljivke razreda Python so strukturiran način izmenjave podatkov med različnimi primerki razreda. Če **spremenite spremenljivko razreda**, to vpliva **na** vse primerke razreda. To pomeni, da jih ni treba ponovno opredeliti vsakič, ko se instancirajo.

## Kaj so spremenljivke razreda Python?

V Pythonu ustvarjamo spremenljivke razreda znotraj razreda. Za razliko od spremenljivk instance, ki so specifične za vsako instanco razreda, **spremenljivke razreda ohranijo enako vrednost za vse instance**. Spremenljivke razreda so običajno nastavljene pred konstruktorjem in so dostopne za vsako instanco razreda.

Spremenljivke razreda Python so uporabne za shranjevanje **podatkov**, ki veljajo za vse primere razreda, kot so nastavitve konfiguracije, privzete vrednosti ali skupna stanja v hierarhiji razredov. Spremenljivke razreda omogočajo tudi opredelitev metod ali atributov razreda, do katerih ima dostop vsak primer, kar izboljša funkcionalnost in strukturo vašega kode.

## Kakšna je sintaksa spremenljivk razreda v Pythonu?

Spremenljivke razreda Python se ustvarijo **znotraj definicije razreda** in zunaj metod.

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

V razredu `Car` definiramo razredno spremenljivko `total_cars`, da spremljamo skupno število avtomobilov. Konstruktor `__init__` se pokliče, ko se ustvari nova instanca razreda. Pri vsaki instanci se nastavita **spremenljivki instance** `brand` in `model`, razredna spremenljivka `total_cars` pa se poveča za 1.

S klicem metode `display_details()` lahko prikažemo podrobnosti posameznih primerov avtomobilov. V **f-nizu**, metodi za oblikovanje nizov v Pythonu, lahko dostopamo do spremenljivke razreda `total_cars`, da prikažemo skupno število ustvarjenih avtomobilov.

## Primeri uporabe spremenljivk razreda Python

Dostop, spreminjanje in dedovanje igrajo ključno vlogo pri varnem ravnanju s spremenljivkami razreda v Pythonu.

### Dostop do spremenljivk razreda

Do spremenljivk razreda Python dostopamo **prek imena razreda ali instance**, ki mu sledi pika in ime spremenljivke.

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

V Pythonu lahko dostopate do spremenljivk razreda na različnih mestih:

- **V konstruktorju**: V konstruktorju lahko pokličete spremenljivko razreda z uporabo ključne besede `self` ali imena razreda.
- **V metodah instance**: Razredno spremenljivko lahko pokličete v metodah instance z uporabo ključne besede `self` ali imena razreda.
- **Zunaj razreda**: Do spremenljivke razreda lahko dostopate zunaj razreda prek referenčnega objekta ali z imenom razreda.

### Spreminjanje spremenljivk razreda

Spremenljivke razreda Python se lahko spreminjajo neposredno prek imena razreda. Če pa ima spremenljivka instance enako ime kot spremenljivka razreda in poskušate spremeniti spremenljivko prek instance, **se ustvari nova spremenljivka instance**, spremenljivka razreda pa ostane nespremenjena.

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

V tem primeru smo prepisali spremenljivko razreda `class_var` tako, da smo ji dodelili novo vrednost z uporabo razreda `MyClass`. Sprememba se nato samodejno prevzame v primerku `obj`.

### Razredne spremenljivke in dedovanje

Nasledstvo omogoča izpeljanim razredom **dostop** do spremenljivk osnovnega razreda in njihovo uporabo, ne da bi jih bilo treba ponovno definirati.

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

Tukaj definiramo osnovni razred `BaseClass`, ki vsebuje razredno spremenljivko `base_var`. Izpeljani razred `DerivedClass` deduje iz `BaseClass`. Prek dedovanja lahko `DerivedClass` dostopa do razredne spremenljivke `base_var` osnovnega razreda in jo uporablja, ne da bi jo ponovno definiral.


This is a markdown version of: [https://www.ionos.com/sl-si/digitalguide/spletne-strani/razvoj-spletnih-strani/spremenljivke-razreda-python/](https://www.ionos.com/sl-si/digitalguide/spletne-strani/razvoj-spletnih-strani/spremenljivke-razreda-python/) for AI/LLM consumption.