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

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

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

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

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

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

Python — это объектно-ориентированный язык программирования. В отличие от процедурно-ориентированного программирования, где основное внимание уделяется функциям, объектно-ориентированное программирование делает упор на объекты.

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

Мы можем думать о классе как о эскизе (прототипе) дома. В нем указаны все подробности об этажах, дверях, окнах и т. д. На основе этих описаний мы строим дом. Дом — это объект.

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

<час>

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

Подобно тому, как определения функций начинаются с ключевого слова def в Python, определения классов начинаются с ключевого слова class.

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

Вот простое определение класса.

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

Класс создает новое локальное пространство имен, в котором определены все его атрибуты. Атрибуты могут быть данными или функциями.

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

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

class Person:
    "This is a person class"
    age = 10

    def greet(self):
        print('Hello')


# Output: 10
print(Person.age)

# Output: <function Person.greet>
print(Person.greet)

# Output: "This is a person class"
print(Person.__doc__)

Вывод

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

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

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

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

>>> harry = Person()

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

Атрибуты могут быть данными или методом. Методы объекта являются соответствующими функциями этого класса.

Это означает, что поскольку Person.greet это функциональный объект (атрибут класса), Person.greet будет объектом метода.

class Person:
    "This is a person class"
    age = 10

    def greet(self):
        print('Hello')


# create a new object of Person class
harry = Person()

# Output: <function Person.greet>
print(Person.greet)

# Output: <bound method Person.greet of <__main__.Person object>>
print(harry.greet)

# Calling object's greet() method
# Output: Hello
harry.greet()

Вывод

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

Вы могли заметить self параметр в определении функции внутри класса, но мы назвали метод просто как harry.greet() без всяких аргументов. Это все еще работало.

Это связано с тем, что всякий раз, когда объект вызывает свой метод, сам объект передается в качестве первого аргумента. Итак, harry.greet() переводится в Person.greet(harry) .

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

По этим причинам первым аргументом функции в классе должен быть сам объект. Это условно называется 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')


# Create a new ComplexNumber object
num1 = ComplexNumber(2, 3)

# Call get_data() method
# Output: 2+3j
num1.get_data()

# Create another ComplexNumber object
# and create a new attribute 'attr'
num2 = ComplexNumber(5)
num2.attr = 10

# Output: (5, 0, 10)
print((num2.real, num2.imag, num2.attr))

# but c1 object doesn't have attribute 'attr'
# AttributeError: 'ComplexNumber' object has no attribute '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'

В приведенном выше примере мы определили новый класс для представления комплексных чисел. Он имеет две функции:__init__() для инициализации переменных (по умолчанию ноль) и get_data() для правильного отображения числа.

Интересно отметить, что в приведенном выше шаге атрибуты объекта можно создавать на лету. Мы создали новый атрибут attr для объекта num2 и так же читай. Но это не создает этот атрибут для объекта num1 .

<час>

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

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

>>> 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'

Мы можем даже удалить сам объект, используя оператор del.

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

На самом деле, это сложнее, чем это. Когда мы делаем c1 = ComplexNumber(1,3) , в памяти создается новый экземпляр объекта и имя c1 связывается с ним.

По команде del c1 , эта привязка удаляется, а имя c1 удаляется из соответствующего пространства имен. Однако объект продолжает существовать в памяти, и если к нему не привязано другое имя, позже он автоматически уничтожается.

Это автоматическое уничтожение объектов, на которые нет ссылок, в Python также называется сборкой мусора.

<рисунок>

Python

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