English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной курс Python

Управление потоком в Python

Функции Python

Типы данных Python

Операции с файлами в Python

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

Даты и время в Python

Продвинутые знания Python

Руководство по Python

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

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

Что такое классы и объекты в Python?

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

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

Мы можем рассматривать класс как чертеж дома (prototype). Он содержит все详细信息 о полу, дверях, окнах и т.д. На основе этих описаний мы строим дома. Дом - это объект.

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

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

как ключ для определения функцииdefТак же, как и в Python, мы используем ключевое словоclassопределяетКласс.

Первая строка называется docstring и содержит краткое описание класса.尽管不是强制性的,но рекомендуется это делать.

Это простая классовая определение.

class MyNewClass:
    '''Это документационная строка. Я создал новый класс'''
    pass

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

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

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

class MyClass:
	"Это моя вторая класс"
	a = 10
	def func(self):
		print('Hello')
# Выход: 10
print(MyClass.a)
# Выход: < function MyClass.func at 0x0000000003079BF8 >
print(MyClass.func)
# Выход: 'Это моя вторая класс'
print(MyClass.__doc__)

При запуске программы, выводом будет:

10
< function 0x7feaa932eae8 = "" at = "" myclass.func = "">
Это моя вторая класс

Создание объектов с помощью Python

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

Он также может использоваться для создания нового примера объекта класса (инстанцирование). Процесс создания объекта подобенФункцияВызов.

>>> ob = MyClass()

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

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

Это означает, чтоsince MyClass.func является объектом функции (свойство класса), поэтому ob.func станет объектом метода.

class MyClass:
	"Это моя вторая класс"
	a = 10
	def func(self):
		print('Hello')
# Создание нового MyClass
ob = MyClass()
# Выход: < function MyClass.func at 0x000000000335B0D0 >
print(MyClass.func)
# Выход: < bound method MyClass.func of < __main__.MyClass object at 0x000000000332DEF0 >>
print(ob.func)
# Calling function func()
# Output: Hello
ob.func()

You may have noticed the self parameter in the function definition inside the class, but we just call this method ob.func() without anyParameters. It still works.

This is because, as long as the object calls its method, the object itself is passed as the first parameter. Therefore, ob.func() is automatically converted to MyClass.func(ob).

In general, calling a method with an n-element parameter list is equivalent to calling a function with a parameter list created by inserting the method's object before the first parameter.

For these reasons, the first parameter of the function in the class must be the object itself. This is usually calledself. You can use other names, but we strongly recommend that you follow the conventions.

Now, you must be familiar with class objects, instance objects, function objects, method objects, and their differences.

Constructor in Python

Functions that start with double underscores (__ ) are called special functions because they have special meanings.

__init__() function is particularly useful. It is called every time a new object of this class is instantiated.

This type of function in object-oriented programming (OOP) is also called a constructor. We usually use it to initialize all variables.

class ComplexNumber:
    def __init__(self, r = 0, i = 0):
        self.real = r
        self.imag = i
    def getData(self):
        print("{0}+{1}j".format(self.real,self.imag))
# Create a new ComplexNumber object
c1 = ComplexNumber(2,3)
# Calling getData() function
# Output: 2+3j
c1.getData()
# Create another ComplexNumber object
# And create a new attribute 'attr'
c2 = ComplexNumber(5)
c2.attr = 10
# Output: (5, 0, 10)
print((c2.real, c2.imag, c2.attr))
# But the c1 object does not have an attribute 'attr'
# AttributeError: 'ComplexNumber' object has no attribute 'attr'
c1.attr

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

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

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

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

>>> c1 = ComplexNumber(2,3)
>>> del c1.imag
>>> c1.getData()
Traceback (последний вызов в начале):
...
AttributeError: объект 'ComplexNumber' не имеет атрибута 'imag'
>>> del ComplexNumber.getData
>>> c1.getData()
Traceback (последний вызов в начале):
...
AttributeError: объект 'ComplexNumber' не имеет атрибута 'getData'

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

>>> c1 = ComplexNumber(1,3)
>>> del c1
>>> c1
Traceback (последний вызов в начале):
...
NameError: имя 'c1' не определено

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

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

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