Съдържание[Крия][Покажи]
В тази лекция ще научим за класовете, конструкторите и наследяването в Python.
Тези концепции са наистина важни в голяма програма, където трябва да се дефинират различни типове.
Класове
Класовете са от съществено значение в програмирането и не са специфични за Python. Много други програмни езици подкрепят идеята за класове. Използваме класове, за да дефинираме нови типове данни.
Досега научихме за основните типове данни в Python като числа, низове и булеви стойности. Това са основните или прости типове данни в Python. Виждали сме и няколко сложни типа данни като списъци и речници.
Въпреки че тези типове са изключително полезни, те не винаги могат да се използват за моделиране на сложни концепции. Например, помислете за идеята за точка или пазарска количка. Пазарската количка не е булево или списък. Това са различни данни. Така че можем да използваме класове, за да дефинираме нови типове за моделиране на реални концепции.
Сега нека дефинираме нов тип данни, наречен точка. Този нов тип ще има методи, както проверихме преди.
Ето как ще го направите:
Започваме с дефиниране на клас с помощта на ключовата дума „class“ и веднага след това даваме име на нашия клас.
class Point
Сега вижте конвенцията за именуване, която използвах тук. Написах първата буква тук с главна буква, това е, което наричаме конвенция за именуване на паскал. Тази конвенция е различна от тази, която използваме за именуване на нашите променливи и функции, за които винаги използваме малки букви и разделяме няколко думи с долна черта. Но когато именуваме класове, вместо това не използваме долна черта, за да разделим няколко думи, а главна първата буква на всяка дума.
След дефинирането на нашия клас се използва двоеточие, което означава, че сега е дефиниран блок.
class Point:
def move (self):
В този блок можем да дефинираме всички функции или методи, които принадлежат към точки. Например, можем да дефинираме функция, наречена „преместване“ за преместване на точка. Имайте предвид, че веднага щом напишем отворена скоба, PyCharm автоматично добавя „self“ тук. Това е специална ключова дума и нека се върна към нея скоро. Нека отпечатаме „преместване“ на терминала.
print("move")
Нека дефинираме друг метод като „начертаване“ и да го отпечатаме на терминала.
def draw(self):
print("draw")
Приключихме с дефиницията на нашия „точков” клас. С този нов тип можем да създаваме нови обекти. Един клас просто дефинира чертежа или шаблона за създаване на обекти, които са действителните екземпляри, базирани на този план. За да създадем обект, въвеждаме името на нашия клас и след това го извикваме като функция. Това създава нов обект и след това го връща. След това можем да съхраним този обект в променлива. Нека ти покажа:
Тук дефинирахме „точка1“, която е триизмерна точка. Можете да видите, че можем да отпечатаме индивидуални координати на терминала.
Можем да използваме двата метода „рисуване“ и „преместване“ с тази точка.
За да обобщим, ние използваме класове, за да дефинираме нови типове и тези типове могат да имат методи, които дефинираме в тялото на класа. Класовете могат да имат атрибути, които можем да зададем навсякъде в нашите програми.
конструкторите
Досега се научихме как да създаваме нови типове с помощта на класове. Сега има малък проблем с тази реализация. Можем да създадем точков обект без координата x или y с помощта на класове и това не е идеално. Нека ти покажа.
Нека създадем точка и я отпечатаме, преди да зададем координатата x. Изпълнението на нашата програма води до грешка в атрибута като тази:
Това означава, че точковият обект няма атрибут, наречен x. Сега проблемът е, че е възможно да има точков обект без координати x или y. Това няма смисъл, тъй като винаги, когато говорим за точка, трябва да знаем къде се намира тази точка. За да решим този проблем, използваме конструктор. Конструкторът е функция, която се извиква по време на създаване на обект.
Ето как използваме конструктор. Първо, нека предадем стойностите на координатите x и y в горната програма.
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 и y по-късно. Нека актуализираме координатата x:
point = Point(10, 20)
point.x = 11
print(point.x)
Сега координатата x се актуализира до стойност 11.
Упражняване
Ето едно интересно упражнение за вас.
Искам да дефинирате нов тип, наречен човек. Тези обекти „Човек“ трябва да имат „name
", както и "talk()
”Метод.
Това е проста задача и не трябва да отнема повече от няколко минути.
Решение
Започнете с дефинирането на класа „Person“ по този начин:
class Person:
self.name = name
По-късно ще дефинираме конструктора. Сега можем да създадем обекта "Person". Нека го наречем Джон
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.
Концепцията за модули и пакети ще видим в следващата лекция.
Оставете коментар