Как построить классы и определить объекты в Python 3

Вступление

Python - это объектно-ориентированный язык программирования. * Объектно-ориентированное программирование * (ООП) фокусируется на создании шаблонов кода многократного использования, в отличие от процедурного программирования, которое фокусируется на явных последовательных инструкциях. В частности, при работе со сложными программами объектно-ориентированное программирование позволяет повторно использовать код и писать код, который будет более читабельным, что, в свою очередь, делает его более понятным.

Одним из наиболее важных понятий в объектно-ориентированном программировании является различие между классами и объектами, которые определяются следующим образом:

  • * Класс * - проект, созданный программистом для объекта. Это определяет набор атрибутов, которые будут характеризовать любой объект, который создается из этого класса.

  • * Object * - экземпляр класса. Это реализованная версия класса, где класс проявляется в программе.

Они используются для создания шаблонов (в случае классов), а затем используют шаблоны (в случае объектов).

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

Классы

Классы похожи на план или прототип, который вы можете использовать для создания объектов.

Мы определяем классы с помощью ключевого слова + class +, аналогично тому, как мы define functions используя + def + ключевое слово.

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

shark.py

class Shark:
   def swim(self):
       print("The shark is swimming.")

   def be_awesome(self):
       print("The shark is being awesome.")

Поскольку эти функции имеют отступ в классе + Shark +, они называются методами. * Методы * - это особый вид функций, определенных в классе.

Аргументом для этих функций является слово + self +, которое является ссылкой на объекты, созданные на основе этого класса. Чтобы ссылаться на экземпляры (или объекты) класса, + self + всегда будет первым параметром, но он не обязательно должен быть единственным.

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

Создание класса + Shark + выше предоставило нам план объекта.

Объекты

Объект является экземпляром класса. Мы можем взять класс + Shark +, определенный выше, и использовать его для создания объекта или его экземпляра.

Мы сделаем объект + Shark + с именем + sammy +:

sammy = Shark()

Здесь мы инициализировали объект + sammy + как экземпляр класса, установив его равным + Shark () +.

Теперь давайте используем два метода с + Shark + object + sammy +:

sammy = Shark()
sammy.swim()
sammy.be_awesome()

+ Shark + object + sammy + использует два метода + swim () + и + be_awesome () +. Мы вызвали их, используя оператор точки (+. +), Который используется для ссылки на атрибут объекта. В этом случае атрибут является методом и вызывается с круглыми скобками, например, как вы также вызываете функцию.

Поскольку ключевое слово + self + было параметром методов, определенных в классе + Shark +, объект + sammy + передается в методы. Параметр + self + гарантирует, что методы могут ссылаться на атрибуты объекта.

Однако когда мы вызываем методы, в скобках ничего не передается, объект + sammy + автоматически передается с помощью оператора точки.

Давайте добавим объект в контексте программы:

shark.py

class Shark:
   def swim(self):
       print("The shark is swimming.")

   def be_awesome(self):
       print("The shark is being awesome.")


def main():
   sammy = Shark()
   sammy.swim()
   sammy.be_awesome()

if __name__ == "__main__":
   main()

Давайте запустим программу, чтобы увидеть, что она делает:

python shark.py
OutputThe shark is swimming.
The shark is being awesome.

Объект + sammy + вызывает два метода в функции + main () + программы, вызывая запуск этих методов.

Метод конструктора

Метод конструктора используется для инициализации данных. Он запускается, как только создается экземпляр объекта класса. Также известный как метод + init +, он будет первым определением класса и выглядит так:

class Shark:
   def __init__(self):
       print("This is the constructor method.")

Если вы добавили вышеупомянутый метод + init + к классу + Shark + в вышеприведенной программе, программа выдаст следующее без изменения чего-либо в экземпляре + sammy +:

OutputThis is the constructor method.
The shark is swimming.
The shark is being awesome.

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

Вместо того чтобы использовать метод конструктора, описанный выше, давайте создадим метод, который использует переменную + name +, которую мы можем использовать для присвоения имен объектам. Мы передадим + name + в качестве параметра и установим + self.name + равным + name +:

shark.py

class Shark:
   def __init__(self, name):
       self.name = name

Затем мы можем изменить строки в наших функциях для ссылки на имена, как показано ниже:

shark.py

class Shark:
   def __init__(self, name):
       self.name = name

   def swim(self):
       # Reference the name
       print(self.name + " is swimming.")

   def be_awesome(self):
       # Reference the name
       print(self.name + " is being awesome.")

Наконец, мы можем установить имя объекта + Shark + + sammy + равным " Sammy ", передав его в качестве параметра класса + Shark +:

shark.py

class Shark:
   def __init__(self, name):
       self.name = name

   def swim(self):
       print(self.name + " is swimming.")

   def be_awesome(self):
       print(self.name + " is being awesome.")


def main():
   # Set name of Shark object
   sammy = Shark("Sammy")
   sammy.swim()
   sammy.be_awesome()

if __name__ == "__main__":
   main()

Мы можем запустить программу сейчас:

python shark.py
OutputSammy is swimming.
Sammy is being awesome.

Мы видим, что имя, которое мы передали объекту, распечатывается. Мы определили метод + init + с именем параметра (вместе с ключевым словом + self +) и определили переменную внутри метода.

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

Если мы хотим добавить еще один параметр, например + age +, мы можем сделать это, также передав его методу + init +:

class Shark:
   def __init__(self, name, age):
       self.name = name
       self.age = age

Затем, когда мы создаем наш объект + sammy +, мы можем передать возраст Сэмми в нашем утверждении:

sammy = Shark("Sammy", 5)

Чтобы использовать + age +, нам также нужно создать метод в классе, который его вызывает.

Методы конструктора позволяют нам инициализировать определенные атрибуты объекта.

Работа с более чем одним объектом

Классы полезны, потому что они позволяют нам создавать много похожих объектов на основе одного и того же проекта.

Чтобы понять, как это работает, давайте добавим еще один объект + Shark + в нашу программу:

shark.py

class Shark:
   def __init__(self, name):
       self.name = name

   def swim(self):
       print(self.name + " is swimming.")

   def be_awesome(self):
       print(self.name + " is being awesome.")

def main():
   sammy = Shark("Sammy")
   sammy.be_awesome()
   stevie = Shark("Stevie")
   stevie.swim()

if __name__ == "__main__":
 main()

Мы создали второй объект + Shark + с именем + stevie + и передали ему имя +" Stevie + ". В этом примере мы использовали метод `+ be_awesome () + с + sammy + и метод + swim () + с + stevie +.

Давайте запустим программу:

python shark.py
OutputSammy is being awesome.
Stevie is swimming.

Вывод показывает, что мы используем два разных объекта, объект + sammy + и объект + stevie +, оба из класса + Shark +.

Классы позволяют создавать более одного объекта по одному и тому же шаблону, не создавая каждый с нуля.

Заключение

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

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