# Kaip kurti Python klases ir objektus

Python klasės yra tarsi **statybos planai ar šablonai**. Juos galite naudoti, kad parašytumėte pakartotinai naudojamą kodą klasės atributų ir metodų forma.

## Kas yra Python klasės?

Klasė yra **abstrakti sąvoka**, apibūdinanti objektų atributus ir metodus. Python klasė veikia kaip šablonas, skirtas konkrečių objektų, kurie yra klasės instancės, kūrimui. Pavyzdžiui, klasė `Car` gali apibrėžti tokius atributus kaip spalva ir prekės ženklas, taip pat tokius metodus kaip `__drive__` arba `__brake__`.

Nors kiekvienas klasės objektas gali turėti unikalias atributų vertes, tos pačios klasės objektai **dalijasi metodais ir pagrindiniu elgesio modeliu su kitais** klasės **egzemplioriais**. Pavyzdžiui, klasės `Car` objektas `my_car` gali būti sukurtas su spalva `__red__` ir prekės ženklu `__Toyota__`, bet metodai `__drive__` ir `__brake__` bus automatiškai perkelti į egzempliorių.

## Kaip kurti Python klases

Python kalboje klases apibrėžiate naudodami raktinį žodį `class`.

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

Pirmiau pateiktas kodas apibrėžia klasę, pavadintą `MyClass`. Ji turi **konstruktorių** `__init__`, kuris iškviečiamas objekto kūrimo metu ir inicijuoja du atributus: `attribute1` ir `attribute2`. Metodas `my_method` grąžina suformatuotą eilutę, kurioje yra šių atributų reikšmės.

Norėdami išvesti objektą iš šios klasės, naudokite klasės pavadinimą, po kurio nurodykite skliaustelius:

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

## Python klasių naudojimo pavyzdžiai

Python klasės gali kurti sudėtingas sistemas ir ryšius tarp skirtingų objektų. Toliau pateiktuose skyriuose parodysime, kaip dirbti su Python klasėmis.

### `__str()__` funkcija

Python kalbos funkcija `__str__()` yra specialus metodas, kurį galite apibrėžti Python klasėse. Įgyvendinus šią funkciją, ji grąžina eilutę, kuri atspindi **vartotojui suprantamą objekto atvaizdą**. Funkciją `str()` galite naudoti tiesiogiai objekte arba derinti ją su teiginiu `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
```

Pirmiau pateiktame kode `__str__()` metodas `Person` klasėje sukuria **suformatuotą eilutę**, kurioje rodomas asmens vardas ir amžius. Kai `print(person1)` yra vykdomas, jis automatiškai iššaukia `__str__()` metodą `person1` objekto ir išveda eilutę, kurią grąžina metodas.

### Metodų apibrėžimas Python klasėse

Python kalboje galite apibrėžti **metodus klasėje**, kad būtų atliekamos operacijos su klasės objektais. Šiuos metodus gali iškviesti sukurti objektai.

```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 pavyzdyje apibrėžiame klasę `Rectangle` su dviem metodais `area()` ir `perimeter()`, kurie apskaičiuoja stačiakampio plotą ir perimetrą, naudodami objekto inicijavimo metu nurodytą ilgį ir plotį. Python kalboje `self` klasės metode veikia kaip **nuoroda į objektą**, kuriam šiuo metu taikomas metodas.

Objektas `my_rectangle` sukurtas su 5 ilgio ir 10 pločio matmenimis. Tada šiam objektui taikome metodus `area()` ir `perimeter()`, kad apskaičiuotume atitinkamas vertes.

### Objektų savybių keitimas

`.` taškų operatorius gali būti naudojamas norint pasiekti **konkrečius objekto atributus** ir atnaujinti jų vertes. Naujas vertes galite priskirti tiesiogiai atributui.

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

Raktinis žodis `del` naudojamas objekto savybėms ištrinti.

```python
del person1.name
```

Note Atminkite, kad instancinės kintamieji skiriasi nuo [Python klasės kintamųjų](https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/python-klases-kintamieji/). Klasės kintamieji apibrėžiami **už konstruktoriaus ribų** ir juos galima keisti tik naudojant klasės pavadinimą.


This is a markdown version of: [https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/python-classes/](https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/python-classes/) for AI/LLM consumption.