Зміст[Сховати][Показати]
У цій лекції ми дізнаємося про класи, конструктори та успадкування в Python.
Ці поняття дійсно важливі у великій програмі, де необхідно визначити різні типи.
Класи
Класи є важливими в програмуванні, і вони не є специфічними для python. Багато інших мови програмування підтримувати поняття класів. Ми використовуємо класи для визначення нових типів даних.
Наразі ми дізналися про основні типи даних у Python, такі як числа, рядки та логічні значення. Це основні або прості типи даних у Python. Ми також бачили кілька складних типів даних, таких як списки та словники.
Хоча ці типи надзвичайно корисні, їх не завжди можна використовувати для моделювання складних концепцій. Наприклад, подумайте про ідею точки або кошика для покупок. Кошик для покупок не є логічним значенням або списком. Це інший тип даних. Тому ми можемо використовувати класи для визначення нових типів для моделювання реальних понять.
Тепер давайте визначимо новий тип даних під назвою point. Цей новий тип матиме методи, які ми перевіряли раніше.
Ось як ви це зробите:
Ми починаємо з визначення класу за допомогою ключового слова «class», а відразу після цього даємо класу назву.
class Point
Тепер подивіться на угоду про найменування, яку я тут використав. Я зробив тут першу літеру великою, це те, що ми називаємо угодою про іменування Pascal. Ця конвенція відрізняється від тієї, яку ми використовуємо для імен наших змінних і функцій, для яких ми завжди використовуємо малі літери та розділяємо кілька слів за допомогою підкреслення. Але коли називаємо класи, ми не використовуємо підкреслення для розділення кількох слів, ми пишемо першу літеру кожного слова великою.
Після визначення нашого класу використовується двокрапка, що означає, що блок визначено.
class Point:
def move (self):
У цьому блоці ми можемо визначити всі функції або методи, які належать до точок. Наприклад, ми можемо визначити функцію під назвою «переміщення» для переміщення точки. Зверніть увагу, щойно ми вводимо розкриту дужку, PyCharm автоматично додає сюди «self». Це особливе ключове слово, і дозвольте мені повернутися до нього незабаром. Давайте надрукуємо «move» на терміналі.
print("move")
Давайте визначимо інший метод, наприклад “draw” і роздрукуємо його на терміналі.
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.
Здійснювати
Ось вам цікава вправа.
Я хочу, щоб ви визначили новий тип під назвою людина. Ці об’єкти “Person” повинні мати “name
", а також "talk()
”Метод.
Це просте завдання, яке не займе більше кількох хвилин.
рішення
Почніть із визначення класу “Person” таким чином:
class Person:
self.name = name
Конструктор ми визначимо пізніше. Тепер ми можемо створити об’єкт «Людина». Давайте назвемо його Джон
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")
Після визначення нашого класу «Ссавець» ми можемо використовувати успадкування для передачі атрибутів таким чином:
Класи dog і cat успадковують усі методи класу, визначені в їх батьківському класі. Тепер ми можемо додати такі спеціальні методи для собак:
class Dog:
def bark(self):
print("bark")
Завершіть!
Це було все про класи, конструктори та повторне використання коду в класах із концепціями успадкування. Зараз ми наближаємося до кінця нашої серії. До цього моменту ви зможете створювати хороші, читабельні та лаконічні коди на Python.
У наступній лекції ми побачимо концепцію модулів і пакетів.
залишити коментар