Содержание[Скрывать][Показывать]
В этой лекции мы узнаем о классах, конструкторах и наследовании в python.
Эти концепции очень важны в больших программах, где необходимо определить разные типы.
Классы
Классы необходимы в программировании, и они не специфичны для python. Многие другие языки программирования поддерживают идею классов. Мы используем классы для определения новых типов данных.
На данный момент мы узнали об основных типах данных в Python, таких как числа, строки и логические значения. Это основные или простые типы данных в Python. Мы также видели пару сложных типов данных, таких как списки и словари.
Хотя эти типы чрезвычайно полезны, их не всегда можно использовать для моделирования сложных концепций. Например, подумайте об идее точки или тележки для покупок. Корзина не является логическим значением или списком. Это другой вид данных. Таким образом, мы можем использовать классы для определения новых типов для моделирования реальных понятий.
Теперь давайте определим новый тип данных, называемый точкой. Этот новый тип будет иметь методы, которые мы проверили ранее.
Вот как вы это сделаете:
Мы начинаем с определения класса, используя ключевое слово «класс», и сразу после этого мы даем нашему классу имя.
class Point
Теперь взгляните на соглашение об именах, которое я здесь использовал. Я написал здесь первую букву с заглавной буквы, это то, что мы называем соглашением об именах в Паскале. Это соглашение отличается от того, которое мы используем для именования наших переменных и функций, для которых мы всегда используем строчные буквы и разделяем несколько слов с помощью подчеркивания. Но при именовании классов мы не используем знак подчеркивания для разделения нескольких слов, вместо этого мы делаем заглавной первую букву каждого слова.
После определения нашего класса используется двоеточие, означающее, что теперь определен блок.
class Point:
def move (self):
В этом блоке мы можем определить все функции или методы, принадлежащие точкам. Например, мы можем определить функцию под названием «перемещение» для перемещения точки. Обратите внимание, что как только мы вводим открывающую скобку, PyCharm автоматически добавляет сюда «я». Это специальное ключевое слово, и позвольте мне вернуться к нему в ближайшее время. Напечатаем в терминале «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")
После определения нашего класса «Млекопитающее» мы можем использовать наследование для передачи атрибутов следующим образом:
Классы собак и кошек наследуют все методы класса, определенные в их родительском классе. Теперь мы можем добавить методы, специфичные для собак, например:
class Dog:
def bark(self):
print("bark")
Заворачивать!
Это было все о классах, конструкторах и повторном использовании кода в классах с концепциями наследования. Вот мы и подошли к концу нашей серии. К этому моменту вы должны быть в состоянии создавать хорошие, читаемые и лаконичные коды на Python.
Мы увидим концепцию модулей и пакетов в следующей лекции.
Оставьте комментарий