Мазмұны[Жасыру][Көрсету]
Бұл лекцияда біз python тіліндегі класстар, конструкторлар және мұрагерлік туралы білеміз.
Бұл ұғымдар әртүрлі типтерді анықтау қажет болатын үлкен бағдарламада өте маңызды.
Сыныптар
Сыныптар бағдарламалауда маңызды және олар питонға тән емес. Көптеген басқа бағдарламалау тілдері сыныптар туралы түсінікті қолдайды. Біз жаңа деректер түрлерін анықтау үшін сыныптарды пайдаланамыз.
Осы уақытқа дейін біз Python-да сандар, жолдар және логикалық мәндер сияқты негізгі деректер түрлері туралы білдік. Бұл Python тіліндегі негізгі немесе қарапайым деректер түрлері. Біз сондай-ақ тізімдер мен сөздіктер сияқты бірнеше күрделі деректер түрлерін көрдік.
Бұл түрлер өте пайдалы болғанымен, оларды әрқашан күрделі ұғымдарды модельдеу үшін қолдануға болмайды. Мысалы, нүкте немесе сауда арбасының идеясы туралы ойланыңыз. Себет логикалық немесе тізім емес. Бұл деректердің басқа түрі. Сондықтан біз нақты ұғымдарды модельдеу үшін жаңа типтерді анықтау үшін сыныптарды пайдалана аламыз.
Енді нүкте деп аталатын жаңа деректер түрін анықтайық. Бұл жаңа түрдің біз бұрын тексерген әдістері болады.
Сіз мұны осылай жасайсыз:
Біз сыныпты «class» кілт сөзін қолдану арқылы анықтаудан бастаймыз, содан кейін сыныпқа атау береміз.
class Point
Енді мен осы жерде қолданған атау шартын қараңыз. Мен мұнда бірінші әріпті бас әріппен жаздым, бұл біз Паскаль атау конвенциясы деп атаймыз. Бұл конвенция біз әрқашан кіші әріптерді қолданатын және астын сызу арқылы бірнеше сөзді бөлетін айнымалылар мен функцияларды атау үшін қолданатын конвенциядан ерекшеленеді. Бірақ сыныптарды атағанда бірнеше сөзді ажырату үшін астын сызуды қолданбаймыз, әр сөздің бірінші әрпін бас әріппен жазамыз.
Біздің сыныпты анықтағаннан кейін қос нүкте қолданылады, бұл енді блок анықталғанын білдіреді.
class Point:
def move (self):
Бұл блокта біз нүктелерге жататын барлық функцияларды немесе әдістерді анықтай аламыз. Мысалы, нүктені жылжыту үшін «жылжыту» деп аталатын функцияны анықтай аламыз. Ашық жақшаны терген бойда PyCharm автоматты түрде мұнда «өзіндік» дегенді қосатынын ескеріңіз. Бұл ерекше кілт сөз және маған жақын арада қайта оралуға рұқсат етіңіз. Терминалда «жылжыту» сөзін басып шығарайық.
print("move")
«Сурет» сияқты басқа әдісті анықтап, оны терминалға басып шығарайық.
def draw(self):
print("draw")
Біз «нүкте» сыныбының анықтамасын аяқтадық. Осы жаңа типпен біз жаңа нысандар жасай аламыз. Класс жай ғана жоспарды немесе осы жобаға негізделген нақты даналары болып табылатын нысандарды жасау үшін үлгіні анықтайды. Объектіні жасау үшін біз сыныптың атын тереміз, содан кейін оны функция сияқты шақырамыз. Бұл жаңа нысанды жасайды, содан кейін оны қайтарады. Содан кейін біз бұл нысанды айнымалыда сақтай аламыз. Сізге көрсетейін:
Мұнда біз үш өлшемді нүкте болып табылатын «1 нүктесін» анықтадық. Көріп отырсыз, біз терминалда жеке координаттарды басып шығара аламыз.
Осы нүктемен біз «сызу» және «қозғалу» екі әдісін пайдалана аламыз.
Сонымен, қайталау үшін біз жаңа типтерді анықтау үшін сыныптарды пайдаланамыз және бұл түрлерде сыныптың негізгі бөлігінде анықтайтын әдістер болуы мүмкін. Сыныптарда біздің бағдарламалардың кез келген жерінде орнатуға болатын атрибуттар болуы мүмкін.
Құрылысшылар
Осы уақытқа дейін біз сыныптарды пайдаланып жаңа типтерді құруды үйрендік. Енді бұл іске асыруда кішкене мәселе бар. Біз сыныптарды пайдаланып x немесе y координатсыз нүкте нысанын жасай аламыз және бұл идеалды емес. Мен сізге көрсетейін.
x координатасын орнатпас бұрын нүкте жасап, оны басып шығарайық. Бағдарламаны іске қосу келесідей атрибут қатесіне әкеледі:
Бұл нүктелік нысанның х деп аталатын атрибутының жоқтығын білдіреді. Енді мәселе мынада: х немесе у координаталары жоқ нүктелік объект болуы мүмкін. Бұл мағынасы жоқ, өйткені біз кез келген нүкте туралы сөйлескен кезде, біз бұл нүктенің қай жерде орналасқанын білуіміз керек. Бұл мәселені шешу үшін біз конструкторды қолданамыз. Конструктор - объект құру кезінде шақырылатын функция.
Біз конструкторды қалай қолданамыз. Алдымен жоғарыдағы бағдарламада х және у координаттарының мәндерін берейік.
point = Point(10, 20)
print(point.x)
Енді осы сыныпқа конструктор деп аталатын арнайы әдісті қосу керек. Оның синтаксисі келесідей:
def __init__(self, x, y):
init
инициализациялау үшін қысқа және бұл жаңа нүкте нысаны жасалғанда шақырылатын функция немесе әдіс. x және y бірден кейін қосылады self
екі қосымша параметрді қосу үшін.
Осыдан кейін біз x және y мәндерін берілген мәндерге, яғни 10 және 20-ға салыстыруымыз керек
self.x = x
self.y = y
Біз оны пайдаланамыз self
ағымдағы нысанға сілтеме жасау үшін, содан кейін «x» функциясына берілген x аргументіне x төлсипатын орнатамыз. Осылайша, пайдалану init
әдісі арқылы біз нысандарды инициализациялай аламыз. Бұл әдіс конструктор деп аталады. Бағдарламамызды орындайық.
Енді х және у координаталарын кейінірек өзгерте аламыз. x координатасын жаңартайық:
point = Point(10, 20)
point.x = 11
print(point.x)
Енді x координатасы 11 мәніне жаңартылды.
жаттығу
Міне, сізге қызықты жаттығу.
Мен адам деп аталатын жаңа типті анықтауыңызды қалаймын. Бұл «Тұлға» нысандарында «name
» атрибуты, сондай-ақ «talk()
»Әдісі.
Бұл қарапайым тапсырма және бір-екі минуттан аспауы керек.
шешім
«Тұлға» сыныбын келесідей анықтаудан бастаңыз:
class Person:
self.name = name
Конструкторды кейінірек анықтаймыз. Енді біз «Тұлға» нысанын жасай аламыз. Оны Джон деп атаймыз
john = Person("John Smith")
print(john.name)
john.talk()
Енді кодтың бірінші бөлігіне өтіп, конструкторды жасаңыз.
def __init__(self, name):
Соңғы код келесідей болады:
Сондай-ақ пішімделген жолдарды және басқа ұғымдарды сыныптармен және конструкторлармен бірге пайдалануға болады.
Мұрагерлік
Мұрагерлік - кодты қайта пайдалануға мүмкіндік беретін сыныптармен байланысты басқа тұжырымдама.
Бұл код бөлігін қарастырыңыз.
class Dog:
def walk(self):
print("walk")
«Жүру» әдісімен «Ит» сыныбын құрдық. Бұл әдісте біз жай ғана терминалда серуендеу хабарламасын басып шығарамыз. Айталық, нақты бағдарламада мұнда бір жолдың орнына 10 код жолы бар. Болашақта «жүру» әдісіне ие болу үшін басқа сынып қажет болса, біз бұл кодтың барлығын қайталауымыз керек. Бұл идеал емес.
Бағдарламалауда бізде DRY деп аталатын принцип бар, ол өзіңізді қайталамаңыз дегенді білдіреді. Болашақта біз «серуендеу» әдісімізде ақаулық бар делік және егер біз бұл әдісті көптеген басқа жерлерде қайталаған немесе қайталаған болсақ, біз қайтып оралып, оны қайталаған әрбір жерде бұл мәселені шешуіміз керек. код. Сондықтан бағдарламалауда бір нәрсені екі рет анықтауға болмайды.
Бұл мәселені шешудің әртүрлі тәсілдері бар, бірақ біз мұнда жаңадан бастағандар үшін оңайырақ және ол мұрагерлік деп аталатынын үйренеміз. Бұл жағдайда біз басқа «сүтқоректілер» класын жасаймыз және сол сыныптағы «жүру» атрибутымызды анықтаймыз.
class Mammal:
def walk(self):
print("walk")
Біздің «Сүтқоректілер» класын анықтағаннан кейін біз келесідей атрибуттарды беру үшін мұраны пайдалана аламыз:
Иттер де, мысықтар да өздерінің ата-аналық сыныбында анықталған барлық класс әдістерін мұра етеді. Енді біз иттерге тән әдістерді қоса аламыз:
class Dog:
def bark(self):
print("bark")
Аяқтау!
Мұның бәрі сыныптар, конструкторлар және мұра тұжырымдамалары бар сыныптарда кодты қайта пайдалану туралы болды. Енді біз сериалымызды аяқтауға жақынбыз. Осы кезде сіз Python тілінде жақсы, оқылатын және қысқа кодтар жасай алуыңыз керек.
Модульдер мен пакеттер ұғымын келесі дәрісте көреміз.
пікір қалдыру