# Kuidas luua Python-klassid ja objektid

Python-klassid on nagu **ehitusplaanid või mallid**. Neid saab kasutada korduvkasutatava koodi kirjutamiseks klassi atribuutide ja meetodite vormis.

## Mis on Python-klassid?

Klass on **abstraktne mõiste**, mis kirjeldab objektide atribuute ja meetodeid. Python-klass toimib mallina konkreetsete objektide loomiseks, mis on klassi instantsid. Näiteks klass `Car` võiks määratleda atribuudid nagu värv ja bränd ning meetodid nagu `__drive__` või `__brake__`.

Kuigi iga klassi objekt võib omada unikaalseid atribuudi väärtusi, **jagavad** sama klassi objektid **meetodeid ja põhilist käitumise raamistikku teiste** klassi **instantsidega**. Näiteks võib klassi `Car` objekti `my_car` luua värviga `__red__` ja brändiga `__Toyota__`, kuid meetodid `__drive__` ja `__brake__` kantakse automaatselt üle instantsile.

## Kuidas luua Python-klasse

Pythonis määratletakse klassid märksõna `class` abil.

```python
class MyClass:
    # Constructor method called when creating an object
    def __init__(self, attribute1, attribute2):
        self.attribute1 = attribute1
        self.attribute2 = attribute2
    
    # Method defined within the class
    def my_method(self):
        return f"Attribute 1: {self.attribute1}, Attribute 2: {self.attribute2}"
```

Eespool olev kood määratleb klassi nimega `MyClass`. Sellel on **konstruktor** `__init__`, mis kutsutakse esile objekti loomisel, initsialiseerides kaks atribuuti: `attribute1` ja `attribute2`. Meetod `my_method` tagastab vormindatud stringi, mis sisaldab nende atribuutide väärtusi.

Selle klassi objektide tuletamiseks kasuta klassi nime, millele järgneb sulgudes:

```python
object1 = MyClass("Value 1", "Value 2")
# Calling a method of the object
result = object1.my_method()
```

## Näited Python-klasside kasutamise kohta

Python-klassid võimaldavad luua keerukaid süsteeme ja suhteid erinevate objektide vahel. Järgmistes jaotistes näitame, kuidas Python-klassidega töötada.

### `__str()__` funktsioon

Pythonis on funktsioon `__str__()` spetsiaalne meetod, mida saab defineerida Python-klassides. Rakendamisel tagastab see stringi, mis esindab **objekti kasutajasõbralikku kujutist**. Funktsiooni `str()` saab kasutada otse objektil või kombineerida selle `print()`.

```python
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def __str__(self):
        return f"Name: {self.name}, Age: {self.age}"
person1 = Person("Alice", 30)
print(person1) # Output: Name: Alice, Age: 30
```

Eespool toodud koodis loob klassi `Person` meetod `__str__()` **vormindatud stringi**, mis kuvab isiku nime ja vanuse. Kui `print(person1)` täidetakse, kutsub see automaatselt välja objekti `person1` meetodi `__str__()` ja väljastab meetodi poolt tagastatud stringi.

### Meetodite määratlemine Python-klassides

Pythonis saab **klassi sees** defineerida **meetodeid**, et teha operatsioone klassi objektidega. Neid meetodeid saavad seejärel kutsuda loodud objektid.

```python
class Rectangle:
    def __init__(self, length, width):
        self.length = length
        self.width = width
    
    def area(self):
        return self.length * self.width
    def perimeter(self):
        return 2 * (self.length + self.width)
# Creating an object of the class
my_rectangle = Rectangle(5, 10)
# Calling methods of the object
area = my_rectangle.area()
perimeter = my_rectangle.perimeter()
# Printing the calculated values
print("Area =", area) # Output: Area = 50
print("Perimeter =", perimeter) # Output: Perimeter = 30
```

Python’i näites määratleme klassi `Rectangle` kahe meetodiga `area()` ja `perimeter()`, mis arvutavad ristküliku pindala ja ümbermõõdu, kasutades objekti algseadistamisel antud pikkust ja laius. Python’is toimib klassimeetodi `self` **viide objektile**, millele meetod hetkel rakendatakse.

Objekt `my_rectangle` loodakse pikkusega 5 ja laiusega 10. Seejärel kutsume selle objekti meetodid `area()` ja `perimeter()`, et arvutada vastavad väärtused.

### Objektide omaduste muutmine

`.` operaatorit saab kasutada **objekti konkreetsete atribuutide** juurdepääsuks ja nende väärtuste uuendamiseks. Uued väärtused saab atribuutidele otse omistada.

```python
person1.name = "Sarah"
person1.age = 35
```

Märksõna `del` kasutatakse objekti omaduste kustutamiseks.

```python
del person1.name
```

Note Pidage meeles, et instantsi muutujad erinevad [Pythoni klassi muutujatest](https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/pythoni-klassi-muutujad/). Klassimuutujad on defineeritud **konstruktori väljaspool** ja **neid** saab muuta ainult klassi nime kasutades.


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