3.58M
Category: programmingprogramming

Класове в Python. Лекция VII

1.

ЛЕКЦИЯ VII © 2023 Нет Ит
Класове
В Python

2.

Създаване и инстанциране на
клас?
Всички обекти в Python са създадени от класове. Целта на Обектноориентирано програмиране (ООП) е да използва повторно един и
същ код, като същевременно дава гъвкавост за създаване на всеки
обект със собствени функции. Днес ще научим условията и етапите
на ООП, както и как да напишем първият си клас.

3.

Какво е обект?
Погледнете обкръжението си, какво виждате? В момента може около
вас да има диван, стол, телевизор, книга и т.н. В програмирането
всичко това би било представено като обекти. А обектите в python се
създават чрез класове. Да вземем кола например. Всички
автомобили имат сходни функции и могат да бъдат изградени от
шаблон. Всяка кола обикновено има колела, цвят, марка, модел,
година, рег. номер и т.н. Това, което ни позволява класът, е да
създадем структура, която да съдържа всички тези функционалности
в него и чрез класът да създаваме различни автомобили от него.
Това ще намали кода, който трябва да напишем, и ще ни даде
възможност да задаваме различни лични характеристики на всяка
кола, която създаваме, специфични за този обект.

4.

Какво е обект? (1)

5.

ООП етапи

6.

ООП етапи
Има два етапа в създаването и използването на класове.
• Първият етап е описване на клас (class definition) – какво
класът ще съдържа (подобно на като при създаването на
функция).
• Вторият етап се нарича инстанциране (instantiation). Това е
процес на създаване на обект от даден клас.
• Когато един обект е инстанциран – тогава казваме, че този обект е
инстанция на даденият клас.
• Може да се създадат множество инстанции на даден клас.
• Следва да създаден първият си клас.

7.

Създаване на клас
За да създадете нов клас, синтаксисът е като при функции, но трябва
да се използва ключовата дума class вместо def. В отстъпа на този
клас ще опишем неговите атрибути и методи. Нека да разгледаме
примера:
Всички класове, които ще създаваме ще имат такава структура.
Вместо да пишем pass, на негово място ще поставяме атрибутите и
методите на класа.
Типовете данни в Python също са класове. Ако принтирате например
типът int ще видите следното нещо <class ‘int’>.

8.

Създаване на инстанция
Подобно на съхраняването на данни в променлива, аналогично
можем да използваме подобен синтаксис, като след името на класа,
използваме скоби. Нека да разгледаме следният пример:
В този код създаваме клас с име Car и създаваме обект (инстанция)
от даденият клас, които се съхранява в променлива под име ford.
Това “0x1047a0ca0” показва, къде в паметта на компютъра се намира
нашият нов обект.

9.

Създаване на повече от една
Можем
да създаваме повече от един обект от клас. Нека да
инстанция
разгледаме следният пример:
Двете стойности, които получаваме след изпълнение на програмата
са числени стойности оказващи, къде се намират създадените
обекти в паметта на компютъра.

10.

Клас - атрибути

11.

Създаване на повече от една
Атрибутите
са просто променливи, дефинирани в клас, нищо повече
инстанция
от това. Атрибут е как съхраняваме лична информация за всеки
обект. Например, за автомобил атрибутите може да бъдат цвят, брой
на колелата, броя на седалките, размера на двигателя и т.н.
Атрибутите на класа са автоматично зададени в неговата
дефиницията, така че на всеки екземпляр, създаден от класа Car, ще
бъде даден звукът “beep” и цвят “red”. За да достъпим даден
атрибут на клас използваме точка.

12.

Как да променяме атрибутите на
Не
всички създадени от вас обекти ще имат едни и същи
класа?
характеристики, така че трябва да имате възможността да променяте
стойността на атрибутите. За да направите това, ще трябва да
използвате следният синтаксис:
Променяме стойност на атрибут, така както го правим и с обикновена
променлива.

13.

Използване на метод __init__()
• Когато искате да създадете обект със специфични свойства,
трябва да използвате метода за инициализация (init). Още се
нарича конструктор. Всеки път, когато се създава инстанция,
методът init се извиква незабавно. Можете да използвате този
метод за създаване на обекти с различни стойности на
атрибутите. Това ни позволява лесно да създаваме обекти от клас
с персонализирани атрибути.
• За да достъпим атрибутите на класа се използва ключовата дума
self. Когато правим инстанция на класа, ние се обръщаме към
него с неговото име. Когато обаче в класът искаме да променим
нещо ползваме self. Към self се закачват атрибутите и методите на
класът.

14.

__init__() и повече от един обект
Нека да видим как работи __init__() при създаването на повече от
един обект. Ако __init__() методът липсва тогава Python използва
базовият конструктор на класът.

15.

Глобални атрибути или член
Глобалните
атрибути могат да бъдат препращани директно от класа
атрибути
и всички негови инстанции, докато член атрибутите (които са
дефинирани в метода init) могат да бъдат достъпни само от
инстанциите на класа. Ако атрибут е деклариран вътре в клас, но не
в метода init, той е известен като глобален атрибут. Всички атрибути,
декларирани в метода init, използвайки ключовата дума self, са
атрибути на създадената инстанция.

16.

Клас - Методи

17.

Създаване и извикване на метод
Дефинирането на метод е същото като дефинирането на функция;
обаче просто поставяте кода в блока отстъпи на класа. Когато
декларирате метод, до който възнамерявате да осъществявате
достъп чрез инстанции, трябва да използвате параметъра self в
определението. Без ключовата дума self, методът може да бъде
достъпен само от самия клас. За да извикате метод, използвате
точков синтаксис. Тъй като методите са само функции, трябва да ги
извикате с скоби след името на екземпляра:

18.

Достъпване на атрибутите в клас
Всеки един метод от класа може да достъпва атрибутите на неговият
методите
клас. Аналогично, използваме ключовата дума self последвана от
точка и името на атрибута. Вътре в даден клас можем да създадем
инстанция от друг клас и да я присвоим на член-променлива, която
да достъпим, например в метод на класа.

19.

Обхват на клас метод

20.

Предаване на параметри към клас
Един от начините, които споменахме за предаване на параметри към
метод
класът е чрез извикването на неговият конструктор и подаването на
параметри. Друг вариант е да се извика функция на класът, която да
приеме като параметър това което й се подава. Особеност:
подаденият параметър не се закачва на self.

21.

Използване на Setters и Getters
Създадени са специални методи за капсулиране на информацията в
класът. Setters помагат да се инициализират вътрешните атрибути
(скритите) в класа, а getters позволяват атрибутите да се достъпят от
други класове.

22.

Увеличаване на атрибут в метод
Можем да увеличаваме и намаляваме стойности на атрибути вътре
е класът. Възможно е и други класове да го правят. Операцията е
успешна само, когато атрибута е глобален за класа или е скрит и има
setter, чрез който да се промени.

23.

Методи извикващи други методи
Можем да извикваме метод в метод, като само изпишем името му и
подаден необходимите аргументи, ако трябва да се подават.

24.

Магически методи
Макар че имат смешно име, магическите методи са в основата на
класовете в Python. Всички магически методи имат две подчертания
преди и след името им. Когато в нашият клас искаме да принтираме
например до какво се отнася класът или някакъв текст, който да
излиза или някакво по специфично принтиране на информацията на
класът използваме вграденият магически метод за целта __str__().
Има
много
други
такива
методи:
http://zetcode.com/python/magicmethods/

25.

Допълнителни линкове
Finance Automation with Python
https://www.youtube.com/watch?v=A3PRB1Wc0UA
Python docstrings
https://www.programiz.com/python-programming/docstrings

26.

© 2023 Нет Ит
БЛАГОДАРЯ
ЗА ВНИМАНИЕТО!
English     Русский Rules