Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Python

Объекты и классы в Python: практическое руководство

Объекты и классы в Python

Это руководство исследует основные объектно-ориентированные возможности Python, проводя через создание классов, инстанцирование и лучшие практики для надёжного кода.

Видео: Классы и объекты в Python

Объекты и классы в Python

Python фундаментально объектно-ориентирован. В то время как процедурное программирование фокусируется на функциях, ООП центрируется на объектах, объединяющих данные и поведение.

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

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

Из одного класса можно построить множество объектов. Инстанцирование — процесс создания объекта из класса.


Определение класса в Python

Определения классов начинаются с ключевого слова class, так же как функции — с def. Первая строка в классе — docstring, дающий краткое описание.

class MyNewClass:
    '''This is a docstring. I have created a new class'''
    pass

Определение класса устанавливает новое пространство имён для его атрибутов, которые могут быть данными или методами. Специальные атрибуты, начинающиеся с двойных подчёркиваний, такие как __doc__, хранят метаданные вроде docstring.

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

class Person:
    "This is a person class"
    age = 10
    def greet(self):
        print('Hello')
# Вывод: 10
print(Person.age)
# Вывод: <function Person.greet>
print(Person.greet)
# Вывод: "This is a person class"
print(Person.__doc__)

Вывод

10
<function Person.greet at 0x7fc78c6e8160>
This is a person class

Создание объекта в Python

Классы служат фабриками для объектов. Инстанцирование похоже на вызов функции:

>>> harry = Person()

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

class Person:
    "This is a person class"
    age = 10
    def greet(self):
        print('Hello')
# создание нового объекта класса Person
harry = Person()
# Вывод: <function Person.greet>
print(Person.greet)
# Вывод: <bound method Person.greet of <__main__.Person object>>
print(harry.greet)
# Вызов метода greet() объекта
# Вывод: Hello
harry.greet()

Вывод

<function Person.greet at 0x7fd288e4e160>
<bound method Person.greet of <__main__.Person object at 0x7fd288e9fa30>>
Hello

Обратите внимание на параметр self в определениях методов. Когда метод вызывается на экземпляре, Python автоматически передаёт экземпляр как первый аргумент, позволяя harry.greet() выполняться без явного предоставления self.

По соглашению используется self, хотя синтаксически допустимо любое имя. Следование этому соглашению повышает читаемость и соответствует стандартам сообщества.


Конструкторы в Python

Специальные методы с префиксом двойного подчёркивания выполняют специальные роли. Метод __init__, вызываемый при инстанцировании, выступает конструктором, инициализируя состояние экземпляра.

class ComplexNumber:
    def __init__(self, r=0, i=0):
        self.real = r
        self.imag = i
    def get_data(self):
        print(f'{self.real}+{self.imag}j')
# Создание нового объекта ComplexNumber
num1 = ComplexNumber(2, 3)
# Вызов метода get_data()
# Вывод: 2+3j
num1.get_data()
# Создание другого объекта ComplexNumber
# и добавление динамического атрибута 'attr'
num2 = ComplexNumber(5)
num2.attr = 10
# Вывод: (5, 0, 10)
print((num2.real, num2.imag, num2.attr))
# Доступ к отсутствующему атрибуту вызывает ошибку
print(num1.attr)

Вывод

2+3j
(5, 0, 10)
Traceback (most recent call last):
  File "<string>", line 27, in <module>
print(num1.attr)
AttributeError: 'ComplexNumber' object has no attribute 'attr'

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


Удаление атрибутов и объектов

Атрибуты можно удалять оператором del. Удаление метода или атрибута класса влияет на последующие вызовы.

>>> num1 = ComplexNumber(2,3)
>>> del num1.imag
>>> num1.get_data()
Traceback (most recent call last):
...
AttributeError: 'ComplexNumber' object has no attribute 'imag'
>>> del ComplexNumber.get_data
>>> num1.get_data()
Traceback (most recent call last):
...
AttributeError: 'ComplexNumber' object has no attribute 'get_data'

Сами объекты тоже можно удалять. Удаление ссылки освобождает имя; если других ссылок нет, объект автоматически собирается сборщиком мусора.

>>> c1 = ComplexNumber(1,3)
>>> del c1
>>> c1
Traceback (most recent call last):
...
NameError: name 'c1' is not defined

В Python управление памятью осуществляется через подсчёт ссылок и циклический сборщик мусора, обеспечивая эффективную очистку ресурсов.

Объекты и классы в Python: практическое руководство

Python

  1. Классы и объекты в C#: Фундаменты надёжного ООП
  2. Абстрактные классы и методы в C#: практическое руководство
  3. Частичные классы и методы в C#: понимание и применение
  4. Sealed-классы и sealed-методы в C#: когда использовать, примеры и повышение безопасности кода
  5. Классы и объекты в C++: практическое руководство по объектно-ориентированному программированию
  6. Дружественные функции и классы в C++: мастерство контроля доступа
  7. Ключевые слова и идентификаторы в Python: мастерство зарезервированных слов и соглашений об именовании
  8. Операторы, отступы и комментарии в Python: понятное руководство
  9. Управление директориями и файлами в Python: полное руководство
  10. Пользовательские исключения в Python: практическое руководство