Dinamik tiplashtirilgan



Download 2,94 Mb.
bet67/77
Sana06.10.2022
Hajmi2,94 Mb.
#851613
1   ...   63   64   65   66   67   68   69   70   ...   77
Bog'liq
Dinamik

__hash__(self) — bu metoddan agar sinf nusxasi rejalanuvchan boʻlsa, sqayta aniqlash va lugʻat kaliti saifatida yoki toʻplam ichida foydalanish mumkin:

class Namuna:
def __init__(self, у):
self .x= у
def __hash__(self) :
return hash(self.x)
c = Namuna(10)
d = {}
d[c] = "Qiymat"
print(d[c]) # chiqradi: Qiymat
13.6. Operatorlarni qayta yuklash
Operatorlarni qayta yuklash sinf nusxalariga odatiy amallarni bajarishda ishtirok etishga imkon beradi. Operatorni qayta yuklash uchun sonfda metodni maxsus nom bilan aniqlash talab qilinadi.
Matematik operatorlarni qayta yuklash quyidagi metodlar yordamida amalga oshiriladi:

amal

ma’nosi

yozilishi

х + у

qoʻshish

х.__add__ (у)

у + х

qoʻshish (sinf nusxasi oʻng tomonda)

х.__radd__(у)

х += у

qoʻshish va qiymat berish

х.__iadd__(у)

х - у

ayirish

х.__sub__(у)

у - х

ayirish (sinf nusxasi oʻng tomonda)

х.__rsub__(у)

х -= у

ayirish va qiymat berish

х.__isub__(у)

х * у

koʻpaytirish

х._mul_(у)

у * х

koʻpaytirish (sinf nusxasi oʻng tomonda)

х._rmul__(у)

х *= у

koʻpaytirish va qiymat berish

х.__imul__(у)

х/у

boʻlish

х.__truediv__(у)

у / х

(sinf nusxasi oʻng tomonda)

х._rtruediv_(у)

х /= у

boʻlish va qiymat berish

x._itruediv_(y)

х // у

quyidan yahlitlab boʻlish

х.__floordiv__(у)

y // х

quyidan yahlitlab boʻlish (sinf nusxasi oʻng tomonda)

x._rfloordiv_(y)

х //= у

quyidan yahlitlab boʻlish va qiymat berish

x._ifloordiv_(y)

х % у

boʻlish qoldigʻi

х ._mod__(у)

у % х

boʻlish qoldigʻi (sinf nusxasi oʻng tomonda)

х ._rmod_ (у)

х %= у

boʻlish qoldigʻi va qiymat berish

х.__imod__(у)

х ** у

darajaga koʻtarish

х._pow__(у)

у ** х

darajaga koʻtarish (sinf nusxasi oʻng tomonda)

х.__rpow__(у)

х**= у

darajaga koʻtarish va qiymat berish

х.__ipow__(у)



unar minus

х.__neg__()



unar plyus

х.__pos__()

abs (x)

absolyut qiymat

х._abs_()

Quyidagi kodda matematik operatorlarni qayta yuklash uchun namuna keltirilgan.
class Namuna:
def __init__(self, y) :
self.x = y
def __add__(self, y): # + operatorini qayta yuklash
print("nusxa chap tomonda")
return self.x+y
def __radd__(self, y): # + operatorini qayta yuklash
print("nusxa oʻng tomonda")
return self.x + y
def __iadd__(self, y): # += operatorini qayta yuklash
print("qoʻshib qiymat berish")
self.x += y
return self
c = Namuna(50)
print(c + 10) # chiqaradi: nusxa chap tomonda 60
print(20 + c) # chiqaradi: nusxa oʻng tomonda 70
c += 30 # chiqaradi: qoʻshib qiymat berish
print(c.x) # chiqaradi: 80


13.7. Abstrakt metodlar
Abstrakt metodlar amalda qoʻllanmaydigan metodlarni oʻz ichiga oladi. Odatda, hosila sinf bunday metodlarni qayta aniqlaydi va unung funksiyalarini amalga oshirishda yordam beradi deb faraz qilinadi. Bunday farazni roʻyobga chiqarish abstract metodlar ichida istisnoli vaziyatlarni yuzaga keltiriladi.
class Class1:
def func(self, x): # abstrakt metod.
# raise yordamida istisnoli vaziyat yuzaga keltirilmoqda
raise NotImplementedError("Metodni qayta aniqlash kerak.")
class Class2(Class1): # abstrakt metod - voris
def func(self, x): # metodni qayta aniqlash
print(x)
class Class3(Class1): # sinf metodni qayta aniqlamaydi
pass
c2 = Class2()
c2.func(50) # chiqaradi: 50
c3 = Class3()
try: # istisnoli vaziyatni tutib qolish
c3.func(50) # Hato! func() metodi qayta aniqlanmagan
except NotImplementedError as msg:
print(msg) # chiqaradi: Metodni qayta aniqlash kerak.
Python tilining standart kutubxonasiga abc moduli ham kiradi. Bu metod tarkibida oʻzidan oldin turgam metodning abstraktligini koʻrsatuvchi @abstractmethod dekoratori mavjud. Tarkibida abstract metod aniqlanmagan hosila sinfi nusxasini yaratishga urinish boʻlganda TypeError istisnoli vaziyati yuzaga keladi. Quyida @abstractmethod dekoratoriga namuna keltirilmoqda.
from abc import ABCMeta, abstractmethod
class Class1(metaclass=ABCMeta):
@abstractmethod
def func(self, x): # Abstrakt metod
pass
class Class2(Class1): # abstrakt metod - voris
def func(self, x): # metodni qayta aniqlash
print (x)
class Class3(Class1) : # sinf metodni qayta aniqlamaydi
pass
c2 = Class2()
c2.func(50) # chiqaradi: 50
try:
c3 = Class3() # Hato!. func() metodi qayta aniqlanmagan
c3.func(50)
except TypeError as msg:
print(msg) # func abstrakt metodi yordamida
# Class3 abstrakt sinfi nusxasini yaratib boʻlmadi
Abstrakt statik metodlar hamda sinflarning abstract metodlarini yaratish imkoniyati mavjud va buning uchun zarur dekoratorlar bir vaqtning oʻzida ketma-ket koʻrsatiladi. Quyida abstrakt statik metodi va sinfning abstract metodi boʻlgan sinf e’lon qilinmoqda:
from abc import ABCMeta, abstractmethod
class Namuna(metaclass=ABCMeta):
@staticmethod
@abstractmethod
def static_func(self, x): # statik abstract metod
pass
@classmethod
@abstractmethod
def class_func(self, x): # sinfning abstrakt metodi
pass



Download 2,94 Mb.

Do'stlaringiz bilan baham:
1   ...   63   64   65   66   67   68   69   70   ...   77




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish