Преглед садржаја[Сакрити][Прикажи]
На овом предавању ћемо научити о класама, конструкторима и наслеђивању у Питхон-у.
Ови концепти су заиста важни у великом програму где је потребно дефинисати различите типове.
nastava
Класе су неопходне у програмирању и нису специфичне за Питхон. Многи други програмски језици подржавају појам класа. Користимо класе за дефинисање нових типова података.
До сада смо научили о основним типовима података у Питхон-у као што су бројеви, стрингови и логичке вредности. Ово су основни или једноставни типови података у Питхон-у. Такође смо видели неколико сложених типова података као што су листе и речници.
Иако су ови типови изузетно корисни, не могу се увек користити за моделирање сложених концепата. На пример, размислите о идеји тачке или колица за куповину. Корпа за куповину нису логички или листа. То је друга врста података. Дакле, можемо користити класе да дефинишемо нове типове за моделирање стварних концепата.
Сада, хајде да дефинишемо нови тип података који се зове тачка. Овај нови тип ће имати методе као што смо раније проверили.
Ево како ћете то учинити:
Почињемо тако што дефинишемо класу користећи кључну реч “цласс” и одмах након тога дајемо нашој класи име.
class Point
Сада, погледајте конвенцију именовања коју сам овде користио. Написао сам велико прво слово овде, то је оно што ми зовемо Паскал конвенција о именовању. Ова конвенција се разликује од оне коју користимо за именовање наших променљивих и функција за које увек користимо мала слова и раздвајамо више речи помоћу доње црте. Али када именујемо класе, уместо тога не користимо доњу црту да бисмо одвојили више речи, већ пишемо велико почетно слово сваке речи.
Након дефинисања наше класе, користи се двотачка што значи да је сада дефинисан блок.
class Point:
def move (self):
У овом блоку можемо дефинисати све функције или методе које припадају тачкама. На пример, можемо дефинисати функцију која се зове „померање“ за померање тачке. Имајте на уму да чим откуцамо отворену заграду, ПиЦхарм овде аутоматски додаје „селф“. Ово је посебна кључна реч и дозволите ми да се вратим на то ускоро. Одштампајмо „мове“ на терминалу.
print("move")
Хајде да дефинишемо још један метод као што је „цртање“ и одштампамо га на терминалу.
def draw(self):
print("draw")
Завршили смо са дефиницијом наше "поинт" класе. Са овим новим типом можемо креирати нове објекте. Класа једноставно дефинише нацрт или шаблон за креирање објеката који су стварне инстанце засноване на том нацрту. Да бисмо креирали објекат, укуцамо име наше класе, а затим га зовемо као функцију. Ово креира нови објекат, а затим га враћа. Тада тај објекат можемо сачувати у променљивој. Да ти покажем:
Овде смо дефинисали „тачку1“ која је тродимензионална тачка. То можете видети, можемо да штампамо појединачне координате на терминалу.
Можемо да користимо две методе „цртање“ и „померање“ са овом тачком.
Дакле, да резимирамо, користимо класе да дефинишемо нове типове и ови типови могу имати методе које дефинишемо у телу класе. Класе могу имати атрибуте које можемо поставити било где у нашим програмима.
Конструктори
До сада смо научили како да креирамо нове типове користећи класе. Сада постоји мали проблем са овом имплементацијом. Можемо креирати тачкасти објекат без к или и координата користећи класе и то није идеално. Да ти покажем.
Хајде да направимо тачку и одштампамо је пре него што поставимо к координату. Покретање нашег програма резултира грешком атрибута попут ове:
То значи да тачкасти објекат нема атрибут који се зове к. Сада је проблем што је могуће имати тачкасти објекат без к или и координата. Ово нема смисла јер кад год говоримо о некој тачки, морамо да знамо где се та тачка налази. Да бисмо решили овај проблем, користимо конструктор. Конструктор је функција која се позива у време креирања објекта.
Ево како користимо конструктор. Прво, проследимо вредности к и и координате у горњем програму.
point = Point(10, 20)
print(point.x)
Сада морамо да додамо посебан метод у ову класу који се зове конструктор. Његова синтакса је оваква:
def __init__(self, x, y):
init
је скраћеница за иницијализован, а ово је функција или метод који се позива када се креира нови објекат тачке. к и и се додају одмах после self
да додате два додатна параметра.
Након тога, требало би да мапирамо к и и у прослеђене вредности, тј. 10 и 20
self.x = x
self.y = y
Ми користимо self
да се односи на тренутни објекат, а затим постављамо атрибут к на аргумент к који је прослеђен функцији „к“. На овај начин, користећи init
методом, можемо иницијализовати наше објекте. Овај метод се назива конструктором. Хајде да покренемо наш програм.
Сада можемо касније променити координате к и и. Ажурирајмо к координате:
point = Point(10, 20)
point.x = 11
print(point.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 линија кода уместо само једне линије. У будућности, ако је потребна друга класа да би имала метод „шетње“, мораћемо да поновимо сав тај код. Ово није идеално.
У програмирању имамо принцип који се зове ДРИ, што је скраћеница за не понављај се. Рецимо, некада у будућности, откријемо проблем са нашом методом „шетње“ и ако смо ову методу поновили или дуплирали на многим другим местима, мораћемо да се вратимо и решимо тај проблем на сваком месту где смо ово дуплирали код. Зато у програмирању не треба да дефинишемо нешто двапут.
Постоје различити приступи за решавање овог проблема, али овде ћемо научити онај који је лакши за почетнике, а зове се наслеђивање. У овом случају, креираћемо другу класу „сисар“ и дефинисати наш атрибут „шетња“ у тој класи.
class Mammal:
def walk(self):
print("walk")
Након што дефинишемо нашу класу „Маммал“, можемо да користимо наслеђивање да пренесемо атрибуте на следећи начин:
Класе пас и мачка наслеђују све методе класе дефинисане у њиховој родитељској класи. Сада можемо додати методе специфичне за псе попут ове:
class Dog:
def bark(self):
print("bark")
Упаковати!
Ово се односило на класе, конструкторе и поновно коришћење кода у класама са концептима наслеђивања. Сада смо при крају наше серије. До овог тренутка требало би да будете у могућности да произведете добре, читљиве и сажете кодове у Питхон-у.
Концепт модула и пакета видећемо на следећем предавању.
Ostavite komentar