# Python-luokan muuttujien luominen ja käyttö

Python-luokan muuttujat ovat jäsennelty tapa jakaa tietoja luokan eri instanssien välillä. Jos teet **muutoksia luokan muuttujaan**, se vaikuttaa kaikkiin luokan instansseihin. Tämä tarkoittaa, että sinun ei tarvitse määritellä niitä uudelleen joka kerta, kun ne instansoidaan.

## Mitä ovat Python-luokan muuttujat?

Pythonissa luomme luokkamuuttujia luokan sisällä. Toisin kuin instanssimuuttujat, jotka ovat luokkakohtaisia, **luokkamuuttujat säilyttävät saman arvon kaikissa instansseissa**. Luokkamuuttujat määritetään yleensä ennen konstruktoria, ja niihin pääsee käsiksi minkä tahansa luokan instanssin kautta.

Python-luokan muuttujat ovat hyödyllisiä tallentamaan **tietoja**, jotka koskevat kaikkia luokan instansseja, kuten konfigurointiasetuksia, oletusarvoja tai luokkahierarkiassa jaettuja tiloja. Luokan muuttujien avulla voit myös määritellä luokkametodeja tai attribuutteja, joihin jokainen instanssi voi käyttää, mikä parantaa sekä koodisi toiminnallisuutta että rakennetta.

## Mikä on Python-luokkamuuttujien syntaksi?

Python-luokan muuttujat luodaan **luokkamääritelmän sisällä** ja menetelmien ulkopuolella.

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

Luokassa `Car` määritellään luokkamuuttuja `total_cars`, joka pitää kirjaa autojen kokonaismäärästä. Konstruktori `__init__` kutsutaan, kun luodaan uusi luokan instanssi. Jokaisella instanssoinnilla **instanssimuuttujat** `brand` ja `model` asetetaan ja luokkamuuttuja `total_cars` kasvatetaan yhdellä.

Kutsumalla `display_details()` voimme näyttää kyseisten autojen instanssien tiedot. **F-merkkijonossa**, joka on Python-merkkijonomuotoilumenetelmä, voimme käyttää luokkamuuttujaa `total_cars` näyttämään luotujen autojen kokonaismäärän.

## Esimerkkejä Python-luokan muuttujien käytöstä

Pääsy, muokkaus ja perintö ovat avainasemassa Pythonin luokkamuuttujien turvallisessa käsittelyssä.

### Luokkamuuttujien käyttö

Python-luokan muuttujiin pääsee käsiksi **luokan nimen tai instanssin kautta**, jota seuraa piste ja muuttujan 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.
```

Pythonissa voit käyttää luokkamuuttujia useissa eri paikoissa:

- **Konstruktorissa**: Voit kutsua luokkamuuttujan konstruktorissa joko avainsanalla `self` tai luokkanimellä.
- **Instanssimetodeissa**: Voit kutsua luokkamuuttujan instanssimetodeissa joko avainsanalla `self` tai luokan nimellä.
- **Luokan ulkopuolella**: Voit käyttää luokkamuuttujaa luokan ulkopuolella objektiviittauksen tai luokan nimen avulla.

### Luokkamuuttujien muokkaaminen

Python-luokan muuttujia voidaan muokata suoraan luokan nimen kautta. Jos kuitenkin instanssimuuttujalla on sama nimi kuin luokkamuuttujalla ja yrität muuttaa muuttujaa instanssin kautta, **luodaan uusi instanssimuuttuja** ja luokkamuuttuja pysyy muuttumattomana.

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

Tässä esimerkissä olemme korvannut luokkamuuttujan `class_var` antamalla sille uuden arvon luokalla `MyClass`. Muutos otetaan sitten automaattisesti käyttöön instanssissa `obj`.

### Luokkavaihtelijat ja periytyminen

Perintö mahdollistaa johdettujen luokkien **pääsyn** ja käytön perusluokan luokkamuuttujiin ilman, että niitä tarvitsee määritellä uudelleen.

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

Tässä määritellään perusluokka `BaseClass`, joka sisältää luokkamuuttujan `base_var`. Johdettu luokka `DerivedClass` perii luokasta `BaseClass`. Perinnän kautta `DerivedClass` voi käyttää perusluokan luokkamuuttujaa `base_var` ilman, että sitä tarvitsee määritellä uudelleen.


This is a markdown version of: [https://www.ionos.com/fi-fi/digitalguide/verkkosivustot/verkkosivujen-kehittaeminen/python-luokan-muuttujat/](https://www.ionos.com/fi-fi/digitalguide/verkkosivustot/verkkosivujen-kehittaeminen/python-luokan-muuttujat/) for AI/LLM consumption.