Объектно-ориентированное программирование. Определение класса и создание экземпляра класса в Python
ООП на Python » Python для начинающих » Общие вопросы class python, ооп python, примеры программ на python, программы на python
Объектно-ориентированное программирование (ООП) - это способ организации программы позволяющий использовать один и тот же код многократно. В отличие от функции и модулей ООП позволяет не только разделить программу на фрагменты, но и описать предметы реального мира в виде объектов, а также организовать связи между этими объектами.
Основным "кирпичиком" ООП является класс. Классы в Python - это объект, включающий набор переменных и функций для управления этими переменными. Переменные называют атрибутами, а функции - методами. Класс является фабрикой объектов, т.е. позволяет создать неограниченное количество объектов, основанных на этом классе.
Определение класса и создание экземпляра класса в Python
Класс описывается с помощью ключевого слова class по следующей схеме:
class <Название класса>[(<Класс1>[, ..., <КлассN>])]:
[""" Строка документирования """]
<Описание атрибута и методов>
Инструкция создает новый объект и присваивает ссылку на него идентификатору, указанному после ключевого слова class. Это означает, что название класса должно полностью соответствовать правилам именований переменных. После названия класса в круглых скобках можно указать один или несколько базовых классов через запятую. Если класс не наследует базовые классы, то круглые скобки можно не указывать. Следует заметить, что все выражения внутри инструкции class выполняются при создании объекта, а не при создании экземпляра класса. В качестве примера создадим класс, внутри которого просто выводится сообщение:
# -*- coding: cp866 -*-
class Exemple:
""" Это строка документирования """
print "Инструкции выполняются сразу"
raw_input()
Этот пример содержит только определение класса Exemple и не создает экземпляр класса. Как только поток выполнения достигнет инструкции class, сообщение, указанное в операторе print, будет сразу выведено. Создание переменной (атрибута) внутри класса аналогично созданию обычной переменной. Метод внутри класса создается так же, как и обычная функция, с помощью инструкции def. Метод класса в первом параметре автоматически передается ссылка на экземпляр класса. Общепринято этот параметр называть именем self, хотя это и не обязательно. Доступ к атрибутам и методам класса производится через переменную self с помощью точечной нотации. Например к атрибуту var1 из метода класса можно можно обратиться так: self.var1
Чтобы использовать атрибуты и методы класса, необходимо создать экземпляр класса. Для этого используется следующий синтаксис:
<Экземпляр класса> = <Название класса>([Параметры])
Определим класс Exemple с атрибутам var1 и методом f_print(), выводящим значение этого атрибута, а затем создадим экземпляр класса и вызовем метод:
Создание атрибута и метода
class Exemple:
var1 = 10 # Переменная внутри класса
def f_print(self): # self - это ссылка на экземпляр класса
print self.var1 # Выводим значение переменной
c1 = Exemple() # Создание экземпляра класса
# Вызываем метод f_print()
c1.f_print() # self не указывается при вызове метода
print c1.var1 # К атрибуту можно обратиться непосредственно
При обращении к методам класса используется следующий формат:
<Экземпляр класса>.<имя метода>([Параметры])
Обратите внимание на то, что при вызове метода не нужно передавать ссылку на экземпляр класса в качестве параметра, как это делается в определении метода внутри класса. Ссылку на экземпляр интерпретатор передает автоматически. Обращение к атрибуту класса осуществляется аналогично:
<Экземпляр класса>.<Имя атрибута>
Для доступа к атрибутам и методам можно также использовать следующие функции:
getattr() - возвращает значение атрибута по его названию, заданному в виде строки. С помощью этой функции можно сформировать название атрибута динамически во время выполнения программы.
setattr() - задает значение атрибута. Название атрибута указывается в виде строки.
delattr() - удаляет указанный атрибут. Название атрибута указывается в виде строки.
hasattr() - проверяет наличие указанного атрибута. Если атрибут существует, функция возврощает значение True.
Как работаю функции: getattr(), setattr() и hasattr()
class Class1:
var1 = 10
def f_test(self):
return self.var1
c1 = Class1() # Создаем экземпляр класса
print getattr(c1, "var1") # Выведет: 10
print getattr(c1, "f_test")() # Выведет: 10
print getattr(c1, "var2", 0) # Выведет: 0, т.к. атрибут не найден
setattr(c1, "var2", 20) # Создаем атрибут var2
print getattr(c1, "var2", 0) # Выведет: 20
delattr(c1, "var2") # Удаляем атрибут var2
print getattr(c1, "var2", 0) # Выведет: 0, т.к. атрибут не найден
print hasattr(c1, "var1") # Выведет: True
print hasattr(c1, "var2") # Выведет: False
Все атрибуты класса в языке Python является открытыми (public), т.е. доступными для непосредственного изменения. Кроме того, атрибуты можно создавать динамически после создания класса. Можно создать как атрибут объекта класса, так и атрибут экземпляра класса.
Прицепы ООП применяются аналогична и в других языках программирования. Создание игр, программ, скриптов и сайтов все используют объектно-ориентированное программирование. Сайты сделанные по этим принципам значительно легче понимать и редактировать нужные его функции, можете заказать сайт сделанный профессиональными программистами которые пользуются только новейшими методиками разработки сайтов.
- Как бесплатно раскрутить сайт и группу в социальных сетях
- Игровой автомат Penguin City - регулярные выигрыши в Вулкан Ставка казино
- Создание функции Python
- Модуль threading на примерах
- Играй и выигрывай в игровом автомате Naughty Girls Cabaret онлайн на деньги
- Классы встроенных исключений в Python
- Создание сайтов вместе с ИнфоПите
Вот про ООП очень интересует данная тема, надеюсь будут и дальше статьи. Интересует примеры статей с решением определенных задач нежели общее понимание ООП. Надеюсь я правильно выразился :) в любом случае продолжайте, буду следить за данной рубрикой.
В Python, ООП можно и не использовать. У Python отлично развита модульная архитектура в ООП нет такой уж и надобности. Но, кому как для меня удобнее использовать модули чем классы.
>>Следует заметить, что все выражения внутри инструкции class выполняются при создании объекта, а не при создании экземпляра класса.
Это взорвало мозг... со второго раза понял, что под словом "объект" имелось в виду класс, который относительно языка/реализация является объектом потока. Правильно я понял?
>> Метод класса в первом параметре автоматически передается ссылка на экземпляр класса. Общепринято этот параметр называть именем self, хотя это и не обязательно.
Что-то это вводит в заблуждение при мысли о передачи параметров методу объекта...
Очень интересная статья: http://studopedia.net/2_37721_pokoleniya-yazikov-programmirovaniya.html про поколение языков программирования...