Давайте станем класними: як створювати модулі та класи за допомогою Python

В об'єктно-орієнтованих комп'ютерних мовах, таких як Python, класи в основному є шаблоном для створення власних об'єктів. Об'єкти - це інкапсуляція змінних та функцій в єдине ціле. Об'єкти отримують свої змінні та функції з класів.

Скажи що?

Ось кілька прикладів, які допоможуть вам зрозуміти - читайте далі. Також є інтерактивна оболонка коду, просто натисніть кнопку «Виконати» у верхній частині певного вікна.

Найпростіший спосіб описати класи та способи їх використання - це:

Уявіть, що у вас великі сили. Ви створюєте вид (“клас”).

Потім ви створюєте атрибути для цього виду («властивості») - зріст, вага, кінцівки, колір, сили тощо.

Потім ви створюєте екземпляр цього виду - собаку Фідо, Дрогона з «Гри престолів» тощо. Потім ви працюєте з цими екземплярами:

  • Наприклад, у грі вони вступають у дії, взаємодіють, використовуючи свої атрибути.
  • У банківському додатку вони були б різними операціями.
  • У програмі купівлі / продажу / торгівлі / оренди транспортного засобу клас автомобіля може потім породити такі підкласи, як автомобілі. Кожен мав би такі атрибути, як пробіг, параметри, особливості, колір та комплектація.

Ви вже бачите, чому це корисно. Ви створюєте, повторно використовуєте, адаптуєте та вдосконалюєте елементи дуже ефективно, логічно та корисно.

На даний момент ви, напевно, зрозуміли, що це спосіб класифікації та групування, подібний до того, як люди навчаються:

  • Тварини - це живі істоти, які не є людиною чи деревами, в основному розумінні
  • тоді ви переходите до різних типів тварин - собаки, коти, мабуть, перші тварини, про які дізналися більшість з нас
  • то ви переходите до різних атрибутів тварин - форм, розмірів, звуків, придатків тощо.

Наприклад, коли ви були дитиною, першим розумінням собаки було, мабуть, щось із чотирма ногами, що гавкало. Потім ти навчився розрізняти, що одні - справжні собаки, інші - іграшки. Що ця концепція "собаки" містила багато типів.

Створення та використання класів в основному:

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

Основним моментом тут є класи - це об’єкти, які можуть створювати екземпляри тих шаблонів, на яких можна застосовувати операції та методи. Це чудовий спосіб концептуалізувати, організувати та побудувати ієрархію для будь-якої організації чи процесу.

У міру ускладнення нашого світу це спосіб імітувати цю складність з ієрархічної точки зору. Він також формує глибше розуміння процесів та взаємодії для ділових, технічних та соціальних налаштувань з точки зору віртуальних інформаційних технологій.

Прикладом може бути створена вами відеогра. Кожен символ може бути «класом» зі своїми атрибутами, який взаємодіє з екземплярами інших класів. Король Джордж з класу "Кінг" може взаємодіяти з придворним шутником Кланіманом з класу "Клоун" тощо. Король міг мати королівський клас «слуги», а клас «слуга» завжди мав би клас «короля», наприклад.

Ось що ми будемо робити:

  • створити клас і використовувати його
  • створити модуль і перемістити створення та ініціювання класу до модуля
  • викликати модуль у новій програмі для використання класу

Код доступний у 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