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

Сегодня мы поговорим об объектно-ориентированном программировании и о его применении в python.

Объектно-ориентированное программирование (ООП) — парадигма программирования, в которой основными концепциями являются понятия объектов и классов.

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

Python соответствует принципам объектно-ориентированного программирования. В python всё является объектами - и строки, и списки, и словари, и всё остальное.

Но возможности ООП в python этим не ограничены. Программист может написать свой тип данных (класс), определить в нём свои методы.

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

Приступим теперь собственно к написанию своих классов на python. Попробуем определить собственный класс:

 # Пример простейшего класса, который ничего не делает
 class A:
     pass

Теперь мы можем создать несколько экземпляров этого класса:

a = A()
b = A()
a.arg = 1  # у экземпляра a появился атрибут arg, равный 1
b.arg = 2  # а у экземпляра b - атрибут arg, равный 2
print(a.arg)
 
print(b.arg)

результат:

1
 
2
c = A()
print(c.arg)  # а у этого экземпляра нет arg
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'A' object has no attribute 'arg'

Классу возможно задать собственные методы:

class A:
     def g(self): # self - обязательный аргумент, содержащий в себе экземпляр
                  # класса, передающийся при вызове метода,
                  # поэтому этот аргумент должен присутствовать
                  # во всех методах класса.
         return 'hello world'
 
 a = A()
 a.g()

Результа:

'hello world'

И напоследок еще один пример:

 class B:
     arg = 'Python' # Все экземпляры этого класса будут иметь атрибут arg,
                    # равный "Python"
                    # Но впоследствии мы его можем изменить
     def g(self):
         return self.arg
 
 b = B()
 b.g()
 
 B.g(b)
 
 b.arg = 'spam'
 b.g()

Резлультат:

'Python'
 
'Python'
 
'spam'