Преглед садржаја
Ин Питхон постоје такозване "магичне" методе, односно методе које су конструисане и имају посебно име и које се позивају само под одређеним околностима, будући да директан позив ових метода није уобичајен у опсегу програма.Градитељи
Метода __у томе__ он је задужен да се понаша као конструктор, то јест да ће покренути низ атрибута и извршити код који дефинишемо у тренутку креирања објекта класе, називајући се „__инит__“ са два подвлачења на почетак и крај почетне речи, тада већ имате одговарајућу синтаксу за то Питхон схватите то као „магични“ метод и знајте да се мора извршити приликом инстанцирања класе.
Оно што конструктор постиже је да уместо да уради следеће за иницијализацију објекта:
>>> ф = ФооБар () >>> ф.инит ()
Већ постављајући овај код, објекат је иницијализирао своје атрибуте само помоћу:
>>> ф = ФооБар ()
Као што видите, то је важна уштеда при кодирању и помоћ у случају да заборавимо да иницијализујемо објекат.
Креирање конструктора
Креирајте конструктор у Питхон Прилично је једноставно, само морамо дефинисати методу и додати шта се мора урадити када се објекат креира, да видимо пример:
На слици можете видети дефинисану методу и у ономе што мора да изврши видимо да дефинише атрибут сомевар и једнако је 42. Погледајмо пример како би објекат ове класе радио:
На слици видимо да при дефинисању објекта ф типа ФооБар Покреће се и приликом приступа свом атрибуту сомевар исписује 42, што је вриједност дефинирана у конструктору.
Шта се дешава ако желимо да се атрибути динамички иницијализују, препишимо методу на следећи начин:
класа ФооБар: деф __инит __ (селф, валуе = 42): селф.сомевар = валуе
Уношењем опционог параметра можемо проследити вредност, у случају да је не проследимо, узеће 42 као подразумевану вредност.
Извршење програма би било следеће:
>>> ф = ФооБар ('Ово је аргумент конструктора') >>> ф.сомевар 'Ово је аргумент конструктора'
На овај начин смо наш конструктор учинили динамичним тако да можемо доделити различите атрибуте нашим објектима у зависности од наших потреба унутар програма.
Преписивање конструктора
Постоје случајеви када морамо да наслеђујемо од супер класа, јер за ово понекад морамо да препишемо конструктор, погледајмо следећи пример да бисмо разумели о чему се ради:
Овде смо створили класу која се зове Бирд где конструктор дефинише гладни атрибут, извршавамо следеће и видимо како то функционише:
>>> б = Бирд () >>> б.еат () Аааах… >>> б.еат () Не, хвала!
Шта се дешава ако наслеђујемо из ове класе, да видимо следећи код:
класа СонгБирд (Бирд): деф __инит __ (селф): селф.соунд = 'Скуавк!' деф синг (селф): принт селф.соунд
Покрећемо мали програм:
>>> сб = СонгБирд () >>> сб.синг () Скуавк!
Сада ако позовемо методу еат () видећемо грешку:
>>> сб.еат () Трацебацк (последњи последњи позив): Датотека "", ред 1, у? Датотека "бирдс.пи", 6. ред, у еат иф селф.хунгри: АттрибутеЕррор: Инстанца СонгБирд нема атрибут 'хунгри'
Изузетак нам говори да атрибут гладни не постоји, па морамо позвати конструктор супер класе у оквиру нашег конструктора:
класа СонгБирд (Бирд): деф __инит __ (селф): Бирд .__ инит __ (селф) селф.соунд = 'Скуавк!' деф синг (селф): принт селф.соунд
Сада ће приликом извршавања кода све радити без проблема:
>>> сб = СонгБирд () >>> сб.синг () Скуавк! >>> сб.еат () Аааах… >>> сб.еат () Не, хвала!
Овим смо завршили водич, већ знамо како да користимо __инит__ методу на основни начин и како то учинити када морамо наследити од више класе.Да ли вам се допао и помогао овај водич?Можете наградити аутора притиском на ово дугме да бисте му дали позитиван поен