Объекты и модули
В этом разделе будет описано объектно-ориентированное программированиие и его применение в 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)
1
>>> print(b.arg)
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()
'Python'
>>> B.g(b)
'Python'
>>> b.arg = 'spam'
>>> b.g()
'spam'