6-mavzu. Pythonda sinflar. Xususiyatlar. Usullar. Hodisalar
Download 137.69 Kb. Pdf ko'rish
|
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
ma'muriyatiga murojaat qiling