6-mavzu. Pythonda sinflar. Xususiyatlar. Usullar. Hodisalar


Download 137.69 Kb.
Pdf ko'rish
Sana08.02.2023
Hajmi137.69 Kb.
#1177268


6-mavzu. Pythonda sinflar. Xususiyatlar. Usullar. Hodisalar. 
Python ob'ektga yo'naltirilgan dasturlash paradigmasini qo'llab-quvvatlaydi, ya'ni 
biz dastur komponentlarini sinflar sifatida belgilashimiz mumkin. 
Sinf shablon yoki ob'ektning rasmiy tavsifi bo'lib, ob'ekt esa ushbu sinfning 
namunasini, uning haqiqiy bajarilishini ifodalaydi. Biz quyidagi o'xshashlikni 
keltirishimiz mumkin: hammamiz inson haqida qandaydir tasavvurga egamiz - 
ikkita qo'l, ikki oyoq, bosh, ovqat hazm qilish tizimi, asab tizimi, miya va boshqalar 
mavjudligi. Ba'zi shablon mavjud - bu shablonni sinf deb atash mumkin. Haqiqatan 
ham mavjud bo'lgan shaxs (aslida ushbu sinfning namunasi) bu sinfning ob'ektidir. 
Kod nuqtai nazaridan sinf ma'lum bir vazifani bajaradigan funktsiyalar va 
o'zgaruvchilar to'plamini birlashtiradi. Sinf funksiyalari metodlar deb ham ataladi. 
Ular sinfning xatti-harakatlarini belgilaydi. Va sinf o'zgaruvchilari atributlar deb 
ataladi - ular sinf holatini saqlaydi 
Sinf class kalit so'zi yordamida aniqlanadi: 
class klass_nomi: 
klass_usullari 
Sintaksis ob'ektini yaratish uchun quyidagi sintaksisdan foydalaniladi: 
ob'ekt_nomi = sinf_nomi ([parametrlar]) 
Masalan, shaxsni ifodalovchi oddiy Person sinfini aniqlaymiz: 
class Person: 
name = "Tom" 
def display_info(self): 
print("Привет, меня зовут", self.name) 
person1 = Person() 
person1.display_info() # Привет, меня зовут Tom 
person2 = Person() 
person2.name = "Sam" 
person2.display_info() # Привет, меня зовут Sam 
Person klassi shaxs nomini saqlaydigan nom atributini va shaxs haqidagi 
ma'lumotlarni aks ettiruvchi display_info usulini belgilaydi. 
Har qanday sinfning usullarini belgilashda shuni hisobga olish kerakki, ularning 
barchasi o'zlarining birinchi parametri sifatida konventsiyalarga ko'ra o'z-o'zidan 
deb ataladigan joriy ob'ektga havolani olishlari kerak (bir qator dasturlash tillarida 
mavjud o'ziga xos analog - this kalit so'zi). Sinf ichidagi ushbu havola orqali biz bir 
xil sinfning usullari yoki atributlariga murojaat qilishimiz mumkin. Xususan, 
foydalanuvchi nomi self.name ifodasi orqali olinishi mumkin. 


Person sinfini aniqlagandan so'ng, biz uning bir juft ob'ektini - shaxs1 va shaxs2 
hosil qilamiz. Ob'ekt nomidan foydalanib, uning usullari va atributlariga murojaat 
qilishimiz mumkin. Bunday holda, har bir ob'ekt uchun konsolga satrni ko'rsatadigan 
display_info () usulini chaqiramiz va ikkinchi ob'ekt uchun biz nom atributini ham 
o'zgartiramiz. Bunday holda, display_info usulini chaqirganda, siz self parametri 
uchun qiymatni o'tkazishingiz shart emas. 
Konstruktorlar 
Konstruktor sinf ob'ektini yaratish uchun ishlatiladi. Shunday qilib, yuqorida, biz 
Person sinfining ob'ektlarini yaratganimizda, biz barcha sinflar bilvosita ega bo'lgan 
standart konstruktordan foydalandik: 
person1 = Person() 
person2 = Person() 
Biroq, biz __init__() deb nomlangan maxsus usul yordamida sinflarda konstruktorni 
aniq belgilashimiz mumkin. Misol uchun, keling, Person sinfini unga konstruktor 
qo'shish orqali o'zgartiramiz: 
class Person: 
# конструктор 
def __init__(self, name): 
self.name = name # устанавливаем имя 
def display_info(self): 
print("Привет, меня зовут", self.name) 
person1 = Person("Tom") 
person1.display_info() # Привет, меня зовут Tom 
person2 = Person("Sam") 
person2.display_info() # Привет, меня зовут Sam 
Birinchi parametr sifatida konstruktor joriy ob'ektga - o'ziga havolani ham oladi. 
Konstruktorlar sinf atributlarini o'rnatishlari odatiy hol emas. Shunday qilib, bu 
holda foydalanuvchi nomi konstruktorga self.name atributi uchun o'rnatiladigan 
ikkinchi parametr sifatida uzatiladi. Bundan tashqari, atribut uchun Person sinfining 
oldingi versiyasida bo'lgani kabi sinfdagi nom o'zgaruvchisini aniqlash shart emas. 
Self.name = name sozlanishi allaqachon bilvosita name atributini yaratadi. 
person1 = Person("Tom") 
person2 = Person("Sam") 
Natija 
Привет, меня зовут Tom 
Привет, меня зовут Sam 
Destruktor 
Ob'ekt bilan ishlashni tugatgandan so'ng, uni xotiradan olib tashlash uchun del 
iborasidan foydalanishimiz mumkin: 
person1 = Person("Tom") 
del person1 # удаление из памяти 


# person1.display_info() # Этот метод работать не будет, так как person1 уже 
удален из памяти 
Shuni ta'kidlash kerakki, printsipial jihatdan bu shart emas, chunki skript tugagandan 
so'ng barcha ob'ektlar avtomatik ravishda xotiradan o'chiriladi. 
Bundan tashqari, biz o'rnatilgan __del__ funksiyasini amalga oshirish orqali sinfdagi 
destruktorni aniqlashimiz mumkin, u del operatorini chaqirish natijasida yoki ob'ekt 
avtomatik ravishda o'chirilganda chaqiriladi. Masalan: 
class Person: 
# конструктор 
def __init__(self, name): 
self.name = name # устанавливаем имя 
def __del__(self): 
print(self.name,"удален из памяти") 
def display_info(self): 
print("Привет, меня зовут", self.name) 
person1 = Person("Tom") 
person1.display_info() # Привет, меня зовут Tom 
del person1 # удаление из памяти 
person2 = Person("Sam") 
person2.display_info() # Привет, меня зовут Sam 
Консольный вывод: 
Привет, меня зовут Tom 
Tom удален из памяти 
Привет, меня зовут Sam 
Sam удален из памяти 
Modullar va ulashlarda sinflarni aniqlash
Qoida tariqasida, sinflar alohida modullarga joylashtiriladi va keyin dasturning 
asosiy skriptiga import qilinadi. Loyihada ikkita faylga ega bo'lamiz: main.py fayli 
(dasturning asosiy skripti) va classes.py (sinflar ta'rifi bilan skript). 
Modullarda Python sinflarini aniqlash va ulanish 
Classes.py faylida biz ikkita sinfni aniqlaymiz: 
class Person: 
# конструктор 
def __init__(self, name): 
self.name = name # устанавливаем имя 
def display_info(self): 
print("Привет, меня зовут", self.name) 


class Auto: 
def __init__(self, name): 
self.name = name 
def move(self, speed): 
print(self.name, "едет со скоростью", speed, "км/ч") 
Person sinfiga qo'shimcha ravishda u avtomobilni ifodalovchi va ko'chirish usuli va 
nom atributiga ega bo'lgan Auto sinfini ham belgilaydi. Keling, ushbu sinflarni 
kiritamiz va ularni main.py skriptida ishlatamiz: 
from classes import Person, Auto 
tom = Person("Tom") 
tom.display_info() 
bmw = Auto("BMW") 
bmw.move(65) 
Sinflar modul funksiyalari bilan bir xil tarzda ulanadi. Biz butun modulni ifoda bilan 
kiritishimiz mumkin: 
import classes 
Yoki yuqoridagi misoldagi kabi alohida sinflarni ulang. 
Natijada, biz quyidagi konsol chiqishini olamiz: 
Привет, меня зовут Tom 
BMW едет со скоростью 65 км/ч 

Download 137.69 Kb.

Do'stlaringiz bilan baham:




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