Mundarija[Yashirish][Show]
Ushbu ma'ruzada biz python tilidagi sinflar, konstruktorlar va meros haqida bilib olamiz.
Bu tushunchalar har xil turlarni aniqlash kerak bo'lgan katta dasturda juda muhimdir.
Darslar
Sinflar dasturlashda muhim va ular pythonga xos emas. Boshqa ko'plab dasturlash tillari sinflar tushunchasini qo'llab-quvvatlaydi. Biz yangi ma'lumotlar turlarini aniqlash uchun sinflardan foydalanamiz.
Hozirgacha biz Python-da raqamlar, satrlar va mantiqiy ma'lumotlarning asosiy turlari haqida bilib oldik. Bular Python-dagi asosiy yoki oddiy ma'lumotlar turlari. Shuningdek, biz ro'yxatlar va lug'atlar kabi bir nechta murakkab ma'lumotlar turlarini ko'rdik.
Ushbu turlar juda foydali bo'lsa-da, ularni har doim ham murakkab tushunchalarni modellashtirish uchun ishlatib bo'lmaydi. Misol uchun, nuqta yoki xarid qilish savati g'oyasi haqida o'ylab ko'ring. Savatcha mantiqiy yoki ro'yxat emas. Bu boshqa turdagi ma'lumotlar. Shunday qilib, biz haqiqiy tushunchalarni modellashtirish uchun yangi turlarni aniqlash uchun sinflardan foydalanishimiz mumkin.
Keling, nuqta deb nomlangan yangi ma'lumotlar turini aniqlaymiz. Ushbu yangi turdagi biz avval tekshirganimizdek usullarga ega bo'ladi.
Buni shunday qilasiz:
Biz “class” kalit so‘zidan foydalanib, sinfni belgilashdan boshlaymiz va shundan so‘ng biz sinfimizga nom beramiz.
class Point
Endi men bu yerda ishlatgan nomlash konventsiyasiga qarang. Men bu erda birinchi harfni bosh harf bilan yozdim, buni biz paskal nomlash konventsiyasi deb ataymiz. Bu konventsiya biz o'zgaruvchilar va funksiyalarimizni nomlash uchun ishlatadiganimizdan farq qiladi, ular uchun biz har doim kichik harflardan foydalanamiz va pastki chiziq yordamida bir nechta so'zlarni ajratamiz. Ammo sinflarni nomlashda biz bir nechta so‘zlarni ajratish uchun pastki chiziqdan foydalanmaymiz, har bir so‘zning birinchi harfini bosh harf bilan yozamiz.
Sinfimizni aniqlagandan so'ng, ikkita nuqta qo'llaniladi, bu endi blok aniqlanganligini anglatadi.
class Point:
def move (self):
Ushbu blokda biz nuqtalarga tegishli barcha funktsiyalar yoki usullarni belgilashimiz mumkin. Misol uchun, nuqtani ko'chirish uchun "ko'chirish" deb nomlangan funktsiyani belgilashimiz mumkin. E'tibor bering, biz ochiq qavsni kiritganimizdan so'ng, PyCharm avtomatik ravishda bu erda "o'zini" qo'shadi. Bu maxsus kalit so'z va menga qisqa vaqt ichida qaytishga ruxsat bering. Keling, terminalda "harakat" ni chop qilaylik.
print("move")
Keling, "chizish" kabi boshqa usulni aniqlaymiz va uni terminalda chop qilamiz.
def draw(self):
print("draw")
Biz "nuqta" sinfimizning ta'rifini tugatdik. Ushbu yangi tur yordamida biz yangi ob'ektlar yaratishimiz mumkin. Sinf shunchaki ob'ektlarni yaratish uchun chizma yoki shablonni belgilaydi, ular ushbu rejaga asoslangan haqiqiy misollardir. Ob'ektni yaratish uchun biz sinfimiz nomini yozamiz va keyin uni xuddi funksiya kabi chaqiramiz. Bu yangi ob'ektni yaratadi va keyin uni qaytaradi. Keyin biz ushbu ob'ektni o'zgaruvchida saqlashimiz mumkin. Sizga ko'rsataman:
Bu erda biz uch o'lchovli nuqta bo'lgan "nuqta1" ni aniqladik. Ko'rib turganingizdek, terminalda alohida koordinatalarni chop etishimiz mumkin.
Bu nuqta bilan biz ikkita usuldan "chizish" va "harakat qilish" dan foydalanishimiz mumkin.
Xulosa qilib aytganda, biz yangi turlarni aniqlash uchun sinflardan foydalanamiz va bu turlar biz sinfning tanasida belgilaydigan usullarga ega bo'lishi mumkin. Sinflar bizning dasturlarimizning istalgan joyiga o'rnatishimiz mumkin bo'lgan atributlarga ega bo'lishi mumkin.
Quruvchilar
Hozirgacha biz sinflar yordamida yangi turlarni yaratishni o'rgandik. Endi bu amalga oshirishda kichik muammo bor. Biz sinflar yordamida x yoki y koordinatasiz nuqta ob'ektini yaratishimiz mumkin va bu ideal emas. Men sizga ko'rsataman.
X koordinatasini belgilashdan oldin nuqta yaratamiz va uni chop qilamiz. Dasturimizni ishga tushirish quyidagi atribut xatosiga olib keladi:
Bu nuqta ob'ektining x deb nomlangan atributiga ega emasligini anglatadi. Endi muammo shundaki, x yoki y koordinatalari bo'lmagan nuqta ob'ektiga ega bo'lish mumkin. Bu mantiqqa to'g'ri kelmaydi, chunki biz biron bir nuqta haqida gapirganda, biz bu nuqta qayerda joylashganligini bilishimiz kerak. Ushbu muammoni hal qilish uchun biz konstruktordan foydalanamiz. Konstruktor - bu ob'ektni yaratish vaqtida chaqiriladigan funksiya.
Bu erda biz konstruktordan qanday foydalanamiz. Avval yuqoridagi dasturda x va y koordinata qiymatlarini o'tkazamiz.
point = Point(10, 20)
print(point.x)
Endi biz ushbu sinfga konstruktor deb nomlangan maxsus usulni qo'shishimiz kerak. Uning sintaksisi quyidagicha:
def __init__(self, x, y):
init
initsializatsiya uchun qisqa va bu yangi nuqta obyekti yaratilganda chaqiriladigan funksiya yoki usul. X va y darhol keyin qo'shiladi self
ikkita qo'shimcha parametr qo'shish uchun.
Shundan so'ng, biz x va y ni o'tkazilgan qiymatlarga, ya'ni 10 va 20 ga solishtirishimiz kerak
self.x = x
self.y = y
Biz foydalanamiz self
joriy ob'ektga murojaat qilish uchun va keyin "x" funksiyasiga o'tkazilgan x argumentiga x atributini o'rnatamiz. Shu tarzda, foydalanish init
usuli, biz ob'ektlarimizni ishga tushirishimiz mumkin. Bu usul konstruktor deb ataladi. Keling, dasturimizni ishga tushiraylik.
Endi biz x va y koordinatalarini keyinroq o'zgartirishimiz mumkin. Keling, x koordinatasini yangilaymiz:
point = Point(10, 20)
point.x = 11
print(point.x)
Endi x koordinatasi 11 qiymatiga yangilanadi.
mashq
Mana siz uchun qiziqarli mashq.
Men odam deb nomlangan yangi turni belgilashingizni xohlayman. Ushbu "Shaxs" ob'ektlari "bo'lishi kerak"name
” atributi hamda “talk()
”Usuli.
Bu oddiy vazifa va bir necha daqiqadan ko'proq vaqtni olmaydi.
qaror
“Shaxs” sinfini quyidagicha belgilashdan boshlang:
class Person:
self.name = name
Konstruktorni keyinroq aniqlaymiz. Endi biz "Shaxs" ob'ektini yaratishimiz mumkin. Keling, uni Jon deb ataylik
john = Person("John Smith")
print(john.name)
john.talk()
Endi kodning birinchi qismiga o'ting va konstruktor yarating.
def __init__(self, name):
Yakuniy kod quyidagicha ko'rinadi:
Bundan tashqari, formatlangan satrlar va boshqa tushunchalarni sinflar va konstruktorlar bilan birgalikda ishlatishingiz mumkin.
meros olish
Meros - bu kodni qayta ishlatishga imkon beruvchi sinflar bilan bog'liq yana bir tushuncha.
Ushbu kod qismini ko'rib chiqing.
class Dog:
def walk(self):
print("walk")
Biz “yurish” usuli bilan “It” sinfini yaratdik. Ushbu usulda biz terminalda yurish xabarini chop qilyapmiz. Aytaylik, haqiqiy dasturda bitta satr o'rniga 10 qator kod mavjud. Kelajakda, agar "yurish" usuliga ega bo'lish uchun boshqa sinf kerak bo'lsa, biz ushbu kodning barchasini takrorlashimiz kerak bo'ladi. Bu ideal emas.
Dasturlashda bizda DRY deb nomlangan printsip mavjud bo'lib, u o'zingizni takrorlamang degan ma'noni anglatadi. Aytaylik, kelajakda biz "yurish" usulimizda muammo topdik va agar biz bu usulni boshqa ko'plab joylarda takrorlagan yoki takrorlagan bo'lsak, biz qaytib kelib, buni takrorlagan har bir joyda bu muammoni tuzatishimiz kerak bo'ladi. kod. Shuning uchun dasturlashda biz biror narsani ikki marta aniqlamasligimiz kerak.
Ushbu muammoni hal qilishning turli usullari mavjud, ammo bu erda biz yangi boshlanuvchilar uchun osonroq bo'lganini o'rganamiz va bu meros deb ataladi. Bu holda biz boshqa "sutemizuvchilar" sinfini yaratamiz va o'sha sinfda "yurish" atributimizni aniqlaymiz.
class Mammal:
def walk(self):
print("walk")
"Sutemizuvchilar" sinfimizni aniqlagandan so'ng, biz quyidagi atributlarni o'tkazish uchun merosdan foydalanishimiz mumkin:
It va mushuk sinflari ota-onalar sinfida belgilangan barcha sinf usullarini meros qilib olishadi. Endi biz itlarga xos usullarni qo'shishimiz mumkin:
class Dog:
def bark(self):
print("bark")
Aylantirmoq!
Bularning barchasi sinflar, konstruktorlar va meros tushunchalari bo'lgan sinflarda kodni qayta ishlatish haqida edi. Endi biz seriyamizni yakunlash arafasidamiz. Shu nuqtaga kelib, siz Python-da yaxshi, o'qilishi mumkin bo'lgan va ixcham kodlarni ishlab chiqishingiz kerak.
Modullar va paketlar tushunchasini keyingi ma’ruzada ko‘rib chiqamiz.
Leave a Reply