Как создать простой класс в Python

В объектно-ориентированном языке класс – это расширяемый фрагмент кода, представляющий шаблон для создания и использования объектов этого класса. Объект класса просто ссылается на экземпляр определенного класса.

Основы классов Python

В языке программирования Python каждая часть данных представлена ​​как экземпляр некоторого класса. Если вы не знакомы с языком, ознакомьтесь с нашим руководством по Python для начинающих, прежде чем двигаться дальше.

Класс предоставляет набор поведений в форме функций-членов (также известных как методы), которые имеют реализации, общие для всех экземпляров этого класса, а также определяет способ представления информации о состоянии его экземпляра в форма атрибутов.

Подробнее: Методы классов в Python: важные различия

Приведенный ниже код представляет собой пример определенного класса в Python. Класс, определенный в коде, обеспечивает реализацию класса RaceCar.

Каждый экземпляр класса предоставляет простую модель для различных марок автомобилей и содержит следующую информацию о состоянии: имя автомобиля, имя водителя, номерной знак автомобиля, текущую скорость, плату за превышение скорости и цвет.

Этот класс автомобилей моделирует специальный датчик в каждом автомобиле, который регистрирует штраф в размере 50 долларов США на водителя автомобиля, если он или она превышает установленную законом скорость в 140 миль в час.

Пример класса (класс автомобиля)

 
class Car:
#Constructor
#the init method is responsible for initialising the values of the instance #variables in the class.
def __init__(self, car_name, driver_name, license_plate_number,
current_speed, speeding_charge, colour):
self.car_name = car_name
self._driver_name = driver_name
self._license_plate_number = license_plate_number
self._current_speed = current_speed
self._speeding_charge = speeding_charge
self._colour = colour
#Accessor methods
#The get_car_name method returns the name of the car
def get_car_name(self):
return self._car_name
#The get_driver_name method returns the name of the driver
def get_driver_name(self):
return self._driver_name
#The get_license_plate method returns the license plate of the car
def get_license_plate(self):
return self._license_plate
#The get_current_speed method returns the current speed at which the car is #moving
def get_current_speed(self):
return self._current_speed
#The get_speeding_charge method returns the total amount of money that the
#driver has to pay for over-speeding
def get_speeding_charge(self):
return self._speeding_charge
#The get_colour method returns the colour of our sweet ride!
def get_colour(self):
return self._colour
#Mutator methods
#The set_driver value changes the driver of our car.
def set_driver(self, new_driver):
self._driver_name = new_driver
#The speeding_ticket method ensures that the driver is charged 50 bucks when#he or she caught speeding above 140 miles per hour :(
def speeding_ticket(self, current_speed):
if current_speed <= 140:
return False
else:
self._speeding_charge += 50
return True
#The make_payment method ensures that the driver is able to pay for all the #amount that he or she owes for speeding ticket charges.
def make_payment(self, amount_paid):
self._speeding_charge -= amount_paid

Объяснение примера класса Python

Параметр "Я"

Во-первых, обратите внимание, что существует разница между сигнатурой метода, объявленной в классе, и сигнатурой метода, которая используется программистом для вызова функции. Например, метод get_colour, определенный в классе, принимает один параметр, который является параметром self.

Однако, когда программист вызывает этот метод для экземпляра класса, он не предоставляет никаких параметров. То же самое явление можно наблюдать в методе speeding_ticket, который определен для приема двух параметров в классе (т.е. self и current_speed), но программист может выполнить этот метод, указав значение только для параметра current_speed.

Это связано с тем, что целью предоставленного параметра «self» является привязка метода к экземпляру объекта, для которого он был вызван, и это не значение, которое программист задает.

Конструктор

Конструктор класса относится к методу класса, который пользователь может вызвать для создания экземпляра объекта этого класса. В классе Car пользователь может создать экземпляр объекта, используя следующий синтаксис:

 #creating our very own Bugatti :)
Car(“Bugatti”, “David Sasu”, 90828, 0, 0, "Cherry Red")

Выполнение этого кода приводит к вызову метода __init__ в классе Car. Этот метод отвечает за создание вновь созданного объекта кредитной машины с предоставленными значениями экземпляра. Каждый объект класса Car состоит из шести переменных экземпляра, а именно:

  • _car_name
  • _driver_name
  • _Номерной знак
  • _текущая скорость
  • _speeding_charge
  • _цвет

Методы доступа

Это методы, написанные для доступа к информации о состоянии экземпляра объекта. В классе Car были написаны следующие методы доступа:

  • get_car_name
  • get_driver_name
  • get_license_plate
  • get_current_speed
  • get_speeding_charge
  • get_colour

Методы мутатора:

Это методы, написанные для изменения информации о состоянии экземпляра объекта. В классе Car были написаны следующие методы мутатора:

  • set_driver
  • штраф за превышение скорости
  • совершить платеж

Концепция инкапсуляции

«Инкапсуляция» – это термин, который используется для описания принципа объектно-ориентированного проектирования, когда компоненты программы не должны раскрывать внутренние детали их соответствующих реализаций. Чтобы лучше понять концепцию инкапсуляции, см. Нашу статью об инкапсуляции.

Проверка ошибок

Наша реализация класса Car не является надежной, поскольку она может выйти из строя или выйти из строя в зависимости от входных данных, которые он получает от программиста.

Во-первых, обратите внимание, что мы не проверяем типы параметров методов speeding_ticket и make_payment, а также не проверяем типы каких-либо параметров конструктора. Это может привести к сбою программы, если пользователь предоставит неожиданный аргумент. Например, если пользователь выполняет такой вызов, как speeding_ticket («Chips ahoy»), программа выйдет из строя, поскольку тип, который ожидал метод, был целым числом, а не строкой.

Теперь вы понимаете основы классов Python

В этой статье вы познакомились с концепцией класса Python и объекта класса Python. Вы также познакомились с идеями, на основе которых построен класс python, такими как: инкапсуляция, «собственный» идентификатор, методы доступа и методы мутатора.

Обладая этой информацией, вы сможете самостоятельно создать простой класс Python и протестировать его ?