Bu yakunlovchi darsda dunder metodlar haqida o'rganganlarning barchasini birlashtiramiz. Matematikadagi vektor — bu yo'nalish va katta-kichiklikka ega kattalik. U (x, y) koordinatalar bilan ifodalanadi.
Haqiqiy matematik vektorda qanday amallar bo'ladi?
Har birini dunder metod sifatida yozamiz:
import math
class Vektor:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, boshqa):
# (x1,y1) + (x2,y2) = (x1+x2, y1+y2)
return Vektor(self.x + boshqa.x, self.y + boshqa.y)
def __mul__(self, skalyar):
# (x,y) * s = (x*s, y*s)
return Vektor(self.x * skalyar, self.y * skalyar)
def __eq__(self, boshqa):
# ikki vektor teng bo'lsa — x lar ham, y lar ham teng
return self.x == boshqa.x and self.y == boshqa.y
def __len__(self):
# vektorning uzunligi (moduli) — yaxlitlangan butun son
return int(math.sqrt(self.x ** 2 + self.y ** 2))
def __str__(self):
return f"Vektor({self.x}, {self.y})"Keling, barcha amallarni sinab ko'raylik:
import math
# ...Vektor klassi...
v1 = Vektor(1, 2)
v2 = Vektor(3, 4)
# Qo'shish
v3 = v1 + v2
print(v3) # Vektor(4, 6)
# Skalyar ko'paytirish
v4 = v1 * 3
print(v4) # Vektor(3, 6)
# Tenglik
print(v1 == v2) # False
print(v1 == Vektor(1, 2)) # True
# Uzunlik
v5 = Vektor(3, 4)
print(len(v5)) # 5 (chunki √(9+16) = √25 = 5)
v6 = Vektor(0, 0)
print(len(v6)) # 0 (nol vektor)Har bir dunder metod ma'lum bir operator yoki funksiya bilan bog'liq:
| Yozuv | Chaqiriladigan metod |
|---|---|
v1 + v2 | v1.__add__(v2) |
v1 * 3 | v1.__mul__(3) |
v1 == v2 | v1.__eq__(v2) |
len(v1) | v1.__len__() |
print(v1) | v1.__str__() |
Bu klass endi xuddi Python ning o'rnatilgan sonlar yoki ro'yxatlar kabi tabiiy ishlaydi. v1 + v2 yozish Vektor.qosh(v1, v2) deb yozishdan ancha qulay va o'qilishi oson!
Muhim qoidalar:
int(math.sqrt(...)) — uzunlikni butun songa aylantirish uchun ishlatiladiTo'liq Vektor klassi
Barcha asosiy dunder metodlarni o'z ichiga olgan Vektor klassini yarating:
Vektor klassini yarating: __init__(self, x, y) — self.x = x, self.y = y__add__(self, boshqa) — Vektor(x+bx, y+by) qaytarsin__mul__(self, skalyar) — Vektor(x*s, y*s) qaytarsin__eq__(self, boshqa) — self.x == boshqa.x and self.y == boshqa.y qaytarsin__len__(self) — int(math.sqrt(x² + y²)) qaytarsin__str__(self) — "Vektor({x}, {y})" qaytarsinMisol:
Kiritish:
1 2
3 4
2Chiqish:
Vektor(4, 6)
Vektor(2, 4)
False
2