Нека да станем елегантни: как да създаваме модули и класове с Python

В обектно-ориентираните компютърни езици като Python класовете са основно шаблон за създаване на собствени обекти. Обектите са капсулиране на променливи и функции в едно цяло. Обектите получават своите променливи и функции от класове.

Кажи какво?

Ето няколко примера, които ще ви помогнат да разберете - прочетете нататък. Има и интерактивна кодова обвивка, просто натиснете бутона „Run“ в горната част на конкретния прозорец.

Най-простият начин да опишете класовете и как да ги използвате е следният:

Представете си, че имате големи сили. Създавате вид („клас“).

След това създавате атрибути за този вид („свойства“) - височина, тегло, крайници, цвят, сили и т.н.

След това създавате екземпляр от този вид - кучето Фидо, Дрогон от Игра на тронове и т.н. След това работите с тези екземпляри:

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

Вече виждате защо това е полезно. Вие създавате, използвате повторно, адаптирате и подобрявате елементи по много ефективен, логичен и полезен начин.

Досега вероятно сте разбрали, че това е начин за класифициране и групиране, подобен на начина, по който хората се учат:

  • Животните са живи същества, които не са хора или дървета, в основен смисъл
  • след това преминавате към различни видове животни - кучета, котки са може би първите животни, за които повечето от нас са научили
  • след това преминавате към различни атрибути на животните - форми, размери, звуци, придатъци и така нататък.

Например, когато бяхте дете, първото ви разбиране за куче вероятно беше нещо с четири лака, което лаеше. След това се научихте да различавате, че някои са истински кучета, други са играчки. Че тази концепция „куче“ съдържа много видове.

Създаването и използването на класове е основно:

  • изграждане на шаблон за поставяне на „неща“ - класификация
  • които след това могат да бъдат оперирани. Например издърпване на всички хора с кучета, които бихте могли да поискате да свържат към блог за домашни любимци, или всички банкови клиенти, които може да са добри перспективи за нова кредитна карта.

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

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

Пример може да бъде видео игра, която създавате. Всеки знак може да бъде „клас“ със собствени атрибути, който взаимодейства с екземпляри на други класове. Крал Джордж от класа „Крал“ може да си взаимодейства с придворния шут Фъниман от класа „Клоун“ и т.н. Един крал може да има кралски клас „слуга“, а клас „слуга“ винаги ще има клас „крал“, например.

Ето какво ще направим:

  • създайте клас и го използвайте
  • създайте модул и преместете създаването и инициирането на клас в модула
  • извикайте модула в нова програма, за да използвате класа

Кодът е достъпен в GitHub тук.

#TSB - Create Class in Python - rocket positions (x,y) and graph
#some items and comments bolded to call attention to processimport matplotlib.pyplot as plt
class Rocket(): def __init__(self, x=0, y=0): #each rocket has (x,y) position; user or calling function has choice #of passing in x and y values, or by default they are set at 0 self.x = x self.y = y def move_up(self): self.y += 1 def move_down(self): self.y -= 1 def move_right(self): self.x += 1 def move_left(self): self.x -= 1
#Make a series of rockets - x,y positions, I am calling it rocketrockets=[]rockets.append(Rocket())rockets.append(Rocket(0,2))rockets.append(Rocket(1,4))rockets.append(Rocket(2,6))rockets.append(Rocket(3,7))rockets.append(Rocket(5,9))rockets.append(Rocket(8, 15)) #Show on a graph where each rocket is
for index, rocket in enumerate(rockets): #original position of rockets print("Rocket %d is at (%d, %d)." % (index, rocket.x, rocket.y)) plt.plot(rocket.x, rocket.y, 'ro', linewidth=2, linestyle="dashed", markersize=12) #move the 'rocket' one up rocket.move_up() print("New Rocket position %d is at (%d, %d)." % (index, rocket.x, rocket.y)) #plot the new position plt.plot(rocket.x, rocket.y, 'bo', linewidth=2, linestyle="dashed", markersize=12) #move the rocket left, then plot the new position rocket.move_left() plt.plot(rocket.x, rocket.y, 'yo', linewidth=2, linestyle="dashed", markersize=12)
#show graph legend to match colors with positionplt.gca().legend(('original position','^ - Moved up', '< - Moved left'))plt.show()#plt.legend(loc='upper left')

Сега нека създадем модул и преместим част от кода по-горе в модула. Всеки път, когато трябва да създадем този прост набор от координати x, y във всяка програма, можем да използваме модула, за да го направим.

Какво е модул и защо се нуждаем от него?

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

Например, когато извикате „matplotlib.plot“, вие извиквате модул на пакета. Ако нямате този модул, ще трябва да дефинирате функционалността на графиката във всяка програма, която използва графика на графиката.

От документацията на Python:

Ако излезете от интерпретатора на Python и го въведете отново, дефинициите, които сте направили (функции и променливи) се губят. Следователно, ако искате да напишете малко по-дълга програма, по-добре е да използвате текстов редактор, за да подготвите входа за интерпретатора и вместо това да го стартирате с този файл като вход. Това е известно като създаване на скрипт. Тъй като вашата програма се удължава, може да искате да я разделите на няколко файла за по-лесна поддръжка. Може също да искате да използвате удобна функция, която сте написали в няколко програми, без да копирате дефиницията й във всяка програма. на преводача. Такъв файл се нарича модул;дефиниции от модул могат да бъдат импортирани в други модули или в основния модул (колекцията от променливи, до които имате достъп в скрипт, изпълнен на най-високо ниво и в режим на калкулатор).

Ето нашия прост модул. Необходимо е създаването на клас и функциите за преместване на екземпляр на този клас от горната програма и в свой собствен клас. След това ще използваме това в нова програма, просто като извикаме и препратим този модул:

Забележете какво направихме по-горе:

  • създаде и инициализира класа
  • създаде функция за преместване на екземпляр на класа в четирите основни посоки (нагоре, надолу, надясно, наляво) и стъпките - като параметри или аргументи към функцията
  • създаде друга функция за изчисляване на разстоянието между два екземпляра на класа, използвайки формулата за разстоянието на графиката

Ето как ще използваме новия модул, за да пренапишем същата програма от първата част. Забележете в раздела за импортиране в началото, сега импортираме simple_module1току-що създадения модул:

Here’s the output from the code using our module. Note that they are the same, except for the chart title and the shape of the position markers, which I changed for comparative purposes.

That’s great, you may say — what are some other uses for this? One classic example is a bank account. A customer class might contain the name and contact details and — more importantly — the account class would have deposit and withdrawal elements.

This is grossly oversimplified but, for illustrative purposes, it is useful. That’s it — create a template, then define instances of that template with details (properties), and add value by adding, subtracting, modifying, moving, and using these instances for your program objectives.

Still wondering about classes? Ok, let’s get “classy” — here’s another simple illustration. We will call this class “Person”. It has only two properties — name and age. We will then add an instance of this with a person’s name and age, and print it. Depending on what your objective is, you can imagine all the other details you might add — for example, marital status and location preferences for a social networking app, job experience in years and industry specialization for a career related app. Press the little triangle below to see it work.

So there you have it. You can create many different classes, with parent classes, sub-classes and so on. Thanks for reading — please clap if you liked it. Here are some other references if you would like to learn more:

  • Python documentation — Classes
  • Python Object Oriented — Tutorials Point
  • Classes and Objects — learnpython.org