Класове и обекти на Python - Обектно ориентирано програмиране



Този блог за „Python Class“ се занимава с основите на класа, атрибута и различни OOPS концепции като наследяване, полиморфизъм и капсулиране.

След като Stack Overflow прогнозира, че до 2019 г. Python ще надмине останалите езици по отношение на активните разработчици, търсенето на само расте.Python следва обектно-ориентираната парадигма за програмиране. Той се занимава с деклариране на класове на python, създаване на обекти от тях и взаимодействие с потребителите. В обектно-ориентиран език програмата е разделена на самостоятелни обекти или можете да кажете на няколко мини-програми. Всеки обект представлява различна част от приложението, която може да комуникира помежду си.
В този блог за клас на python ще разберете всеки аспект на класове и обекти в следната последователност:

Да започваме.:-)





Какво е клас на Python?

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

ClassesAndObjects - клас на Python - EdurekaНа първото изображение (А) той представлява план на къща, която може да се разглежда като Клас . Със същия план можем да създадем няколко къщи и те могат да се считат за Обекти . Използвайки клас, можете да добавите последователност към вашите програми, така че те да могат да се използват по-чисти и ефективни начини. Атрибутите са членове на данни (променливи на класа и променливи на екземпляра) и методи, до които има достъп чрез точкова нотация.



  • Променлива на класа е променлива, която се споделя от всички различни обекти / екземпляри на клас.
  • Променливи на инстанцията са променливи, които са уникални за всеки екземпляр. Той се дефинира вътре в метод и принадлежи само на текущия екземпляр на клас.
  • Методи също се извикват като функции, които са дефинирани в клас и описва поведението на обект.

Сега нека продължим напред и да видим как работи в PyCharm. За да започнете, първо разгледайте синтаксиса на клас на python.

Синтаксис :

class Class_name: statement-1. . изявление-N

Тук „ клас ” израз създава нова дефиниция на клас. Името на класа непосредствено следва ключовата дума „ клас ” в python, което е последвано от двоеточие. За да създадете клас в python, разгледайте примера по-долу:



клас служител: преминете #no атрибути и методи emp_1 = служител () emp_2 = служител () #instance променлива може да се създаде ръчно emp_1.first = 'aayushi' emp_1.last = 'Johari' emp_1.email='aayushi@edureka.co 'emp_1.pay = 10000 emp_2.first =' test 'emp_2.last =' abc 'emp_2.email='test@company.com' emp_2.pay = 10000 print (emp_1.email) print (emp_2.email)

Изход -

aayushi@edureka.co test@company.com

Ами ако не искаме ръчно да задаваме тези променливи. Ще видите много код, а също така той е склонен към грешки. За да го направим автоматично, можем да използваме метода “init”. За това нека да разберем какви точно са методите и атрибутите в клас на python.

Методи и атрибути в клас на Python

Сега създаването на клас е непълно без известна функционалност. Така че функционалностите могат да бъдат дефинирани чрез задаване на различни атрибути, които действат като контейнер за данни и функции, свързани с тези атрибути. Функциите в python също се наричат ​​като Методи . Говорейки за в него метод , това е специална функция, която се извиква всеки път, когато е създаден нов обект от този клас. Можете да го възприемате като метод за инициализиране или да го разглеждате като конструктори, ако идвате от друг обектно-ориентиран фон за програмиране като C ++, Java и т.н. Сега, когато зададем метод в клас, те автоматично получават екземпляр. Нека да продължим с класа на python и да приемем името, фамилията и заплатата, използвайки този метод.

служител в класа: def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + последен + '@ company.com' emp_1 = служител ('aayushi', 'johari', 350000) emp_2 = служител ('test', 'test', 100000) print (emp_1.email) print (emp_2.email)

Сега в рамките на нашия метод „init“ сме задали тези променливи на екземпляра (self, first, last, sal). Self е екземпляр, което означава, че когато пишем self.fname = първо, това е същото като emp_1.first = ‘aayushi’. След това създадохме екземпляри на клас служител, където можем да предадем стойностите, посочени в метода init. Този метод приема екземплярите като аргументи. Вместо да го правите ръчно, ще бъде направено автоматично сега.

основна структура на java програмата

След това искаме възможността да извършим някакъв вид действие. За това ще добавим a метод към този клас. Да предположим, че искам функционалността да показва пълното име на служителя. Така че нека да приложим това на практика.

служител в класа: def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + last + '@ company.com' def fullname (self): return '{} {}'. format (self.fname, self.lname) emp_1 = служител ('aayushi', 'johari', 350000) emp_2 = служител ('test', 'test', 100000) print (emp_1.email) print (emp_2.email) print (emp_1.fullname ()) print (emp_2.fullname ())

Изход-

aayushi.johari@company.com test.test@company.com aayushijohari testtest

Както можете да видите по-горе, създадох метод, наречен „пълно име“ в клас. Така че всеки метод в клас на python автоматично приема екземпляра като първи аргумент. Сега в рамките на този метод съм написал логиката за отпечатване на пълно име и връщане на това вместо emp_1 собствено и фамилно име. След това използвах „self“, така че да работи с всички инстанции. Затова, за да отпечатваме това всеки път, използваме a метод .

Продължавайки напред с класовете на Python, има променливи, които се споделят между всички екземпляри на клас. Те се наричат ​​като променливи на класа . Променливите на инстанцията могат да бъдат уникални за всеки екземпляр, като имена, имейл, sal и т.н. Сложни? Нека разберем това с пример. Вижте кода по-долу, за да разберете годишното увеличение на заплатата.

служител в класа: perc_raise = 1,05 def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + last + '@ company.com' def fullname (self): return '{} {}'. format (self.fname, self.lname) def apply_raise (self): self.sal = int (self.sal * 1.05 ) emp_1 = служител ('aayushi', 'johari', 350000) emp_2 = служител ('test', 'test', 100000) print (emp_1.sal) emp_1.apply_raise () print (emp_1.sal)

Изход-

350000 367500

Както можете да видите по-горе, първо отпечатах заплатата и след това приложих увеличението от 1,5%. За да осъществим достъп до тези променливи на класа, трябва или да имаме достъп до тях чрез класа или чрез екземпляр на класа. Сега, нека разберем различните атрибути в клас на python.

Атрибути в клас на Python

Атрибутите в Python дефинират свойство на обект, елемент или файл. Има два типа атрибути:

  • Вградени атрибути на класа: В класовете на Python присъстват различни вградени атрибути. Например _dict_, _doc_, _name _ и др. Нека да взема същия пример, където искам да видя всички двойки ключ-стойност на worker1. За това можете просто да напишете инструкцията по-долу, която съдържа пространството от имена на класа:

    печат (emp_1 .__ dict__)

    След като го изпълните, ще получите изход като: {‘fname’: ‘aayushi’, ‘lname’: ‘johari’, ‘sal’: 350000, ‘email’: ‘aayushi.johari@company.com’}

  • Атрибути, дефинирани от Потребители : Атрибутите се създават в дефиницията на класа. Можем динамично да създаваме нови атрибути за съществуващи екземпляри на клас. Атрибутите могат да бъдат обвързани и с имена на класове.

След това имаме обществено, защитено и частни атрибути. Нека ги разберем подробно:

Именуване Тип Значение
ИмеПубличноТези атрибути могат да се използват свободно вътре или извън дефиницията на клас
_nameЗащитенаЗащитените атрибути не трябва да се използват извън дефиницията на класа, освен ако не са в дефиницията на подклас
__имеЧастенТози вид атрибут е недостъпен и невидим. Не е възможно нито да се четат, нито да се пишат тези атрибути, освен вътре в самата дефиниция на класа


След това нека разберем най-важния компонент в клас на python, т.е. обекти.

Какво представляват обектите в клас на Python?

Както обсъдихме по-горе, обект може да се използва за достъп до различни атрибути. Използва се за създаване на екземпляр на класа. Екземпляр е обект на клас, създаден по време на изпълнение.

тo Ви дава бърз преглед, обектът е основно всичко, което виждате наоколо. Например: Кучето е обект от класа животни, аз съм обект от класа хора. По същия начин може да има различни обекти от един и същи клас телефон.Това е доста подобно на извикване на функция, което вече обсъдихме. Нека разберем това с пример:

клас MyClass: def func (self): print ('Hello') # създаване на нов MyClass ob = MyClass () ob.func ()

Продължавайки напред с класа на python, нека разберем различните концепции за ООП.

OOPs концепции

OOP се отнася до обектно-ориентираното програмиране в Python. Е, Python не е напълно обектно-ориентиран, тъй като съдържа някои процедурни функции. Сега трябва да се чудите каква е разликата между процедурно и обектно-ориентирано програмиране. За да изчистите съмнението си, при процедурно програмиране целият код се записва в една дълга процедура, въпреки че може да съдържа функции и подпрограми. Той не е управляем, тъй като и данните, и логиката се смесват заедно. Но когато говорим за обектно-ориентирано програмиране, програмата е разделена на самостоятелни обекти или няколко мини-програми. Всеки обект представлява различна част от приложението, която има свои собствени данни и логика за комуникация помежду си. Например уебсайтът има различни обекти като изображения, видеоклипове и т.н.
Обектно-ориентираното програмиране включва концепцията за клас Python, обект, наследяване, полиморфизъм, абстракция и др. Нека разберем подробно тези теми.

Клас на Python: наследяване

Наследяването ни позволява да наследяваме атрибути и методи от базовия / родителския клас. Това е полезно, тъй като можем да създадем подкласове и да получим цялата функционалност от нашия родителски клас. След това можем да презапишем и добавим нови функционалности, без да се засяга родителския клас. Нека разберем концепцията за родителски клас и детски клас с пример.

Както виждаме на изображението, дете наследява свойствата от бащата. По същия начин в python има два класа:

1. Родителски клас (Супер или Базов клас)

2. Детски клас (подклас или производен клас)

използване на клас на скенер в java

Клас, който наследява свойствата, е известен като Дете Клас, докато клас, чиито свойства са наследени, е известен като Родител клас.

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

Нека да продължим с класа на python и да разберем как наследяването е полезно.

Кажете, искам да създам класове за типовете служители. Ще създам „разработчици“ и „мениджъри“ като подкласове, тъй като както разработчиците, така и мениджърите ще имат име, имейл и заплата и всички тези функции ще бъдат там в класа на служителите. Така че, вместо да копираме кода за подкласовете, можем просто да използваме повторно кода, като го наследим от служителя.

служител в класа: num_employee = 0 rise_amount = 1.04 def __init __ (self, first, last, sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + last + '@ company.com' worker.num_employee + = 1 def fullname (self): return '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * rise_amount) разработчик на клас (служител): преминете emp_1 = developer ('aayushi', 'johari', 1000000) print (emp_1.email)
 Изход - aayushi.johari@company.com

Както можете да видите в горния изход, всички подробности за класа служител са налични в класа за разработчици.Ами сега, ако искам да променя покачването на сума за разработчик на 10%? да видим как може да се направи на практика.

служител в класа: num_employee = 0 rise_amount = 1.04 def __init __ (self, first, last, sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + last + '@ company.com' worker.num_employee + = 1 def fullname (self): return '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * rise_amount) разработчик на клас (служител): rise_amount = 1.10 emp_1 = developer ('aayushi', 'johari', 1000000) print (emp_1.raise_amount)
 Изход - 1.1

Както виждате, той актуализира процентното увеличение на заплатата от 4% на 10%.Сега, ако искам да добавя още един атрибут, кажете език за програмиране в нашия метод init, но той не съществува в нашия родителски клас. Има ли решение за това? Да! можем да копираме цялата логика на служителите и да направим това, но това отново ще увеличи размера на кода. Така че, за да избегнем това, нека разгледаме кода по-долу:

служител в класа: num_employee = 0 rise_amount = 1.04 def __init __ (self, first, last, sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + last + '@ company.com' worker.num_employee + = 1 def fullname (self): return '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) разработчик на клас (служител): rise_amount = 1.10 def __init __ (self, first, last, sal, prog_lang): super () .__ init __ (first, last, sal) self.prog_lang = prog_lang emp_1 = developer ( 'aayushi', 'johari', 1000000, 'python') print (emp_1.prog_lang)

Ето защо, само с малко код, направих промени. Използвал съм super .__ init __ (first, last, pay), който наследява свойствата от базовия клас.В заключение, наследяването се използва за повторно използване на кода и намаляване на сложността на програмата.

Клас Python: Полиморфизъм

Полиморфизмът в компютърните науки е способността да се представи един и същ интерфейс за различни основни форми. На практика полиморфизмът означава, че ако клас B наследи от клас A, не е необходимо да наследява всичко за клас A, той може да направи някои от нещата, които клас A прави по различен начин. Най-често се използва, когато се занимава с наследство. Python е имплицитно полиморфен, той има способността да претоварва стандартните оператори, така че те да имат подходящо поведение въз основа на техния контекст.

Нека разберем с пример:

class Animal: def __init __ (self, name): self.name = name def talk (self): pass class Dog (Animal): def talk (self): print ('Woof') class Cat (Animal): def talk ( самостоятелно): print ('MEOW!') c = Cat ('kitty') c.talk () d = Dog (Animal) d.talk ()

Изход -

Мяу! Уф

как да променя двойно на int в java -

След това нека преминем към друга обектно-ориентирана концепция за програмиране, т.е. Абстракция.

Клас на Python: Абстракция

Абстракцията се използва за опростяване на сложната реалност чрез моделиране на класове, подходящи за проблема. Тук имаме абстрактен клас, който не може да бъде създаден. Това означава, че не можете да създавате обекти или екземпляри за тези класове. Той може да се използва само за наследяване на определени функционалности, които наричате като основен клас. Така че можете да наследявате функционалности, но в същото време не можете да създавате екземпляр на този конкретен клас. Нека разберем концепцията за абстрактния клас с пример по-долу:

от abc import ABC, abstractmethod class Служител (ABC): @abstractmethod def calcu__lalary (self, sal): pass class Developer (Служител): def calcu__lalary (self, sal): finalsalary = sal * 1.10 return finalsalary emp_1 = Developer () print (emp_1.calculate_salary (10000))

Изход-

11000,0

Както можете да видите в горния изход, ние увеличихме основната заплата до 10%, т.е. заплатата вече е 11000. Сега, ако всъщност продължите и направите обект от клас „Служител“, ще ви изведе грешка, както python не не ви позволява да създадете обект от абстрактен клас. Но използвайки наследяване, всъщност можете да наследите свойствата и да изпълнявате съответните задачи.

Така че, момчета, всичко беше свързано с класове и обекти на python накратко. Ние разгледахме всички основи на клас Python, обекти и различни обектно-ориентирани концепции в python, така че можете да започнете да практикувате сега. Надявам се, че ви е харесало да четете този блог на тема „Python Class“ и сте наясно с всеки един аспект, който съм обсъждал по-горе. След клас на python, ще измисля още блогове на Python за scikit learn библиотека и масив. Останете на линия!

Имате въпрос към нас? Моля, споменете го в раздела за коментари в този блог „Python Class“ и ние ще се свържем с вас възможно най-скоро.

За да получите задълбочени познания за Python заедно с различните му приложения, можете с нашето онлайн обучение на живо с 24/7 поддръжка и доживотен достъп.