Файл: Введение в объектноориентированное программирование.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.12.2023
Просмотров: 143
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
Уровень: Программирование для начинающих
Созданиеклассовиобъектов.Урок2
Уровень: Программирование для начинающих
Конструкторкласса—метод init .Урок3
Уровень: Программирование для начинающих
Уровень: Программирование для начинающих
Уровень: Программирование для начинающих
Уровень: Программирование для начинающих
Форматирование строк документирования
Пример документированного исходного кода
ПерегрузкаоператороввООП.Урок10
Уровень: Программирование для начинающих
Особенностиобъектно-ориентированногопрограммирования.Урок11
Уровень: Программирование для начинающих
Идеи (принципы) объектно-ориентированного программирования
методов данного класса можно поменять и цвет и форму любого объекта. В результате объекты перестают быть одинаковыми (красными и круглыми), хотя сохраняют тот же набор свойств (цвет и форму).
Как же происходят изменения? Дело в том, что методы помимо параметра self, могут иметь и другие параметры, в которых передаются данные для обработки их этим методом. Так, в примере выше, метод changecolor имеет дополнительный параметр newcolor, с помощью которого, в метод можно передать данные о желаемом цвете фигуры. Далее метод меняет цвет с помощью соответствующих инструкций.
Элективный курс: Введение в объектно-ориентированноепрограммированиенаPython
Большинство классов имеют специальный метод, который автоматически при создании объекта создает ему атрибуты. Т.е. вызывать данный метод не нужно, т.к. он сам запускается при вызове класса. (Вызов класса происходит, когда создается объект.) Такой метод называется конструктором класса и в языке программирования Python носит имяinit. (В начале и конце по два знака подчеркивания.)
Первым параметром, как и у любого другого метода, уinitявляется self, на место которого подставляется объект в момент его создания. Второй и последующие (если есть) параметры заменяются аргументами, переданными в
конструктор при вызове класса.
Рассмотрим два класса: в одном будет использоваться конструктор, а в другом нет. Требуется создать два атрибута объекта.
6. obj1 = YesInit("Peter","Ok") 7.
8.
9. print (obj1.fname, obj1.sname) 10.
19. print (obj1.fname, obj1.sname)
Вывод интерпретатора в обоих случаях:
1. Peter Ok
В обоих программах у объекта появляются два атрибута: fname и sname. Однако в первом случае они инициализируются при создании объекта и должны передаваться в скобках при вызове класса. Если какие-то атрибуты должны присутствовать у объектов класса обязательно, то использование методаinit - идеальный вариант. Во второй программе (без использования конструктора) атрибуты создаются путем вызова метода names после создания объекта. В данном случае вызов метода names необязателен, поэтому объекты могут существовать без атрибутов fname и sname.
Обычно метод initпредполагает передачу аргументов при создании объектов, однако аргумент может не быть передан. Например, если в примере выше создать объект так: obj1 = YesInit(), т.е. не передать классу аргументы, то произойдет ошибка. Чтобы избежать подобных ситуаций, можно в методеinit присваивать параметрам значения по умолчанию. Если при вызове класса были заданы аргументы для данных параметров, то хорошо — они и будут использоваться, если нет — еще лучше — в теле метода будут использованы значения по умолчанию. Пример:
Вывод интерпретатора:
В данном случае, второй объект создается без передачи аргументов, поэтому в методе __initиспользуются значения по умолчанию
("noname" и "nonametoo"). При создании третьего и четвертого объектов передаются по одному аргументу. Если указывается значение не первого аргумента, то следует явно указать имя параметра (четвертый объект).
Методinit может содержать параметры как без значений по умолчанию, так и со значениями по умолчанию. В таком случае, параметры, аргументы которых должны быть обязательно указаны при создании объектов, указываются первыми, а параметры со значениями по умолчанию — после. Например, ниже вторая программа с ошибкой:
Напишем более существенную программу с использованием конструктора. Допустим это будет класс, значение начальных атрибутов (из методаinit) которого зависит от переданных аргументов при создании объектов. Далее эти свойства объектов, созданных на основе данного класса, можно менять с
помощью обычных методов.
8. def mwhere(self,n):
9. if n <= 0:
10. self.where = "отсутствуют"
11. elif 0 < n < 100:
31. m1.plus(500)
32. print (m1.numbers, m1.where)
В данном примере значение атрибута where объекта зависит от значения атрибута numbers.
Как же происходят изменения? Дело в том, что методы помимо параметра self, могут иметь и другие параметры, в которых передаются данные для обработки их этим методом. Так, в примере выше, метод changecolor имеет дополнительный параметр newcolor, с помощью которого, в метод можно передать данные о желаемом цвете фигуры. Далее метод меняет цвет с помощью соответствующих инструкций.
Практическая работа:
-
Напишите два скрипта представленных выше. Посмотрите, как они работают. Во второй программу добавьте еще одно свойство и один метод, позволяющий его менять. Создайте третий объект и измените все его свойства. -
Напишите программу в стиле ООП, удовлетворяющую следующим условиям: в программе должны быть два класса и два объекта, принадлежащих разным классам; один объект с помощью метода своего класса должен так или иначе обрабатывать данные другого объекта: obj1.МЕТОД(obj2.СВОЙСТВО).
Конструкторкласса—метод init .Урок3
Методическая разработка урока
Элективный курс: Введение в объектно-ориентированноепрограммированиенаPython
Уровень: Программирование для начинающих
Большинство классов имеют специальный метод, который автоматически при создании объекта создает ему атрибуты. Т.е. вызывать данный метод не нужно, т.к. он сам запускается при вызове класса. (Вызов класса происходит, когда создается объект.) Такой метод называется конструктором класса и в языке программирования Python носит имяinit. (В начале и конце по два знака подчеркивания.)
Первым параметром, как и у любого другого метода, уinitявляется self, на место которого подставляется объект в момент его создания. Второй и последующие (если есть) параметры заменяются аргументами, переданными в
конструктор при вызове класса.
Рассмотрим два класса: в одном будет использоваться конструктор, а в другом нет. Требуется создать два атрибута объекта.
-
class YesInit: -
definit(self,one,two): -
self.fname = one -
self.sname = two 5.
6. obj1 = YesInit("Peter","Ok") 7.
8.
9. print (obj1.fname, obj1.sname) 10.
-
class NoInit: -
def names(self,one,two): -
self.fname = one -
self.sname = two 15.
-
obj1 = YesInit() -
obj1.names("Peter","Ok") 18.
19. print (obj1.fname, obj1.sname)
Вывод интерпретатора в обоих случаях:
1. Peter Ok
В обоих программах у объекта появляются два атрибута: fname и sname. Однако в первом случае они инициализируются при создании объекта и должны передаваться в скобках при вызове класса. Если какие-то атрибуты должны присутствовать у объектов класса обязательно, то использование методаinit - идеальный вариант. Во второй программе (без использования конструктора) атрибуты создаются путем вызова метода names после создания объекта. В данном случае вызов метода names необязателен, поэтому объекты могут существовать без атрибутов fname и sname.
Обычно метод initпредполагает передачу аргументов при создании объектов, однако аргумент может не быть передан. Например, если в примере выше создать объект так: obj1 = YesInit(), т.е. не передать классу аргументы, то произойдет ошибка. Чтобы избежать подобных ситуаций, можно в методеinit присваивать параметрам значения по умолчанию. Если при вызове класса были заданы аргументы для данных параметров, то хорошо — они и будут использоваться, если нет — еще лучше — в теле метода будут использованы значения по умолчанию. Пример:
-
class YesInit: -
definit(self,one="noname",two="nonametoo"): -
self.fname = one -
self.sname = two 5.
-
obj1 = YesInit("Sasha","Tu") -
obj2 = YesInit() -
obj3 = YesInit("Spartak") -
obj4 = YesInit(two="Harry") 10.
-
print (obj1.fname, obj1.sname) -
print (obj2.fname, obj2.sname) -
print (obj3.fname, obj3.sname) -
print (obj4.fname, obj4.sname)
Вывод интерпретатора:
-
Sasha Tu -
noname nonametoo -
Spartak nonametoo -
noname Harry
В данном случае, второй объект создается без передачи аргументов, поэтому в методе __initиспользуются значения по умолчанию
("noname" и "nonametoo"). При создании третьего и четвертого объектов передаются по одному аргументу. Если указывается значение не первого аргумента, то следует явно указать имя параметра (четвертый объект).
Методinit может содержать параметры как без значений по умолчанию, так и со значениями по умолчанию. В таком случае, параметры, аргументы которых должны быть обязательно указаны при создании объектов, указываются первыми, а параметры со значениями по умолчанию — после. Например, ниже вторая программа с ошибкой:
-
class fruits: -
definit(self,w,n=0): -
self.what = w -
self.numbers = n 5.
-
f1 = fruits("apple",150) -
f2 = fruits("pineapple") 8.
-
print (f1.what,f1.numbers) -
print (f2.what,f2.numbers) 11.
-
class fruits: -
definit(self,n=0,w): #ERROR -
self.what = w -
self.numbers = n 16.
-
f1 = fruits(150,"apple") -
f2 = fruits("pineapple") 19.
-
print (f1.what,f1.numbers) -
print (f2.what,f2.numbers)
Напишем более существенную программу с использованием конструктора. Допустим это будет класс, значение начальных атрибутов (из методаinit) которого зависит от переданных аргументов при создании объектов. Далее эти свойства объектов, созданных на основе данного класса, можно менять с
помощью обычных методов.
-
class Building: -
definit(self,w,c,n=0): -
self.what = w -
self.color = c -
self.numbers = n -
self.mwhere(n) 7.
8. def mwhere(self,n):
9. if n <= 0:
10. self.where = "отсутствуют"
11. elif 0 < n < 100:
-
self.where = "малый склад" -
else: -
self.where = "основной склад" 15.
-
def plus(self,p): -
self.numbers = self.numbers + p -
self.mwhere(self.numbers) -
def minus(self,m): -
self.numbers = self.numbers - m -
self.mwhere(self.numbers) 22.
-
m1 = Building("доски", "белые",50) -
m2 = Building("доски", "коричневые", 300) -
m3 = Building("кирпичи","белые") 26.
-
print (m1.what,m1.color,m1.where) -
print (m2.what,m2.color,m2.where) -
print (m3.what,m3.color,m3.where) 30.
31. m1.plus(500)
32. print (m1.numbers, m1.where)
В данном примере значение атрибута where объекта зависит от значения атрибута numbers.