From 8328af949531ac39604b819f4c2689183fefbc84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82?= =?UTF-8?q?=D0=B5=D0=BB=D1=8C=20=E2=84=96=2011=20=D0=B0=D1=83=D0=B4=D0=B8?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B8=D0=B8=20=D0=9A-522?= Date: Mon, 15 Dec 2025 10:32:13 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BE=D1=82=D1=87=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TEMA9/F1.png | Bin 0 -> 22560 bytes TEMA9/report.md | 309 ++++++++++++++++++++++++++++++++++++++++++++++++ TEMA9/task.md | 70 +++++++++++ 3 files changed, 379 insertions(+) create mode 100644 TEMA9/F1.png create mode 100644 TEMA9/report.md create mode 100644 TEMA9/task.md diff --git a/TEMA9/F1.png b/TEMA9/F1.png new file mode 100644 index 0000000000000000000000000000000000000000..1a9e9863d488aacee27f0fe61b5f85d5580fbd51 GIT binary patch literal 22560 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 +``` + +### 2.2. Создание класса-наследника + +```py +class Class2(Class1): + def otobrazh(self): + print('значение =', self.data) +z3 = Class2() +z3 +<__main__.Class2 object at 0x000001D1B66F9370> +dir(z3) +['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', +'__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', +'__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', +'__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_zn'] +``` + +Объекты с нижними подчеркиваниями - встроенные атрибуты и методы, которые есть у каждого класса. Кроме этого, есть унаследованные от родительского класса методы, один из которых переопределен. +Этот пример хорошо иллюстрирует сразу две парадигмы ООП: наследование и полиморфизм. При создании дочернего класса атрибуты и методы родительского класса переносятся дочернему. В дочернем классе +методы могут быть переопределены. То есть метод с одинаковым именем в разных классах будет вести себя по-разному. Это - пример полиморфизма. + +```py +z3.zad_zn('Совсем новое') +z3.otobrazh() +значение = Совсем новое + +# Но при этом: + +z1.otobrazh() +Новое значение атрибута у экз. 1 +del z1, z2, z3 +``` + +## 3. Использование классов, содержащихся в модулях + +```py +from mod3 import Class1 +z4 = Class1() +z4.otobrazh() +Traceback (most recent call last): + File "", line 1, in + File "D:\STUDY\POAS\Тема9\progs\mod3.py", line 5, in otobrazh + print(self.data) + ^^^^^^^^^ +AttributeError: 'Class1' object has no attribute 'data' +``` + +Ошибка возникла потому, что otobrazh было вызвано раньше, чем метод, +инициализирующий атрибут data. Проще говоря, мы пытаемся напечатать значение +несуществующего объекта. + +```py +del z4 +import mod3 +z4 = mod3.Class2() +z4.zad_zn('Класс из модуля') +z4.otobrazh() +значение = Класс из модуля +``` + +Здесь otobrazh - это метод класса Class2 и соответствующего ему экземпляра класса z2. Этот метод не принимает значимых параметров, кроме формального self. + +mod3.otobrazh('Объект') +значение объекта = Объект + +Здесь otobrazh - это уже просто функция, глобально определенная в модуле mod3. Она определена вне пользовательского класса, поэтому атрибута data в ее зоне доступа нет. Так что эта функция принимает один обязательный параметр - выводимую переменную. + +## 4. Использование специальных методов + +```py +class Class3(Class2): # Наследник класса Class2, а через него – и класса Class1 + def __init__(self,znach): # Конструктор-вызывается при создании нового экземпляра класса + self.data=znach + def __add__(self,drug_zn): #Вызывается, когда экземпляр участвует в операции «+» + return Class3(self.data + drug_zn) + def zad_dr_zn(self,povtor): #А это - обычный метод + self.data *= povtor + +from mod3 import Class3 + +# Примечание: при импорте класса его родительские классы подгружаются автоматически + +z5 = Class3('abc') +z5.otobrazh() +значение = abc +z6 = z5 + 'def' +z6.otobrazh() +значение = abcdef +z6.zad_dr_zn(3) +z6.otobrazh() +значение = abcdefabcdefabcdef +``` + + +## 5. Присоединение атрибутов к классу + +```py +dir(Class3) +['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', +'__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', +'__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_dr_zn', 'zad_zn'] + +Class3.fio='Иванов И.И.' +dir(Class3) +['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', +'__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', +'__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn'] + +z7 = Class3(123) +dir(z7) +['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', +'__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', +'__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'data', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn'] +``` + +В dir(z7), по сравнению с dir(Class3), указаны также атрибуты, относящиеся непосредтсвенно к экзаемпляру. dir(Class3) показывает атрибуты класса Class3. Это включает методы, свойства, и встроенные специальные методы класса, но не атрибуты конкретных объектов, созданных на основе этого класса. dir(z7) показывает атрибуты объекта z7. Это включает все атрибуты класса, а также любые другие атрибуты, добавленные динамически постфактум. + +```py +dir(z7)==dir(Class3) +False + +# Добавим еще один атрибут: + +z7.rozden='1987' +dir(z7) +['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', +'__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', +'__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'data', 'fio', 'otobrazh', 'rozden', 'zad_dr_zn', 'zad_zn'] + +# При этом у dir(Class3) его не будет: + +dir(Class3) +['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', +'__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', +'__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn'] +``` + +## 6. Выявление родительских классов + +```py +Class3.__bases__ +(,) +Class2.__bases__ +(,) +Class1.__bases__ +(,) + +# При этом: +object.__bases__ +() + +Полный порядок наследования (Method Resolution Order) +Class3.__mro__ +(, , , ) + +ZeroDivisionError.__mro__ +(, , , , ) +IndexError.__mro__ +(, , , , ) +``` + +## 7. Создание свойства класса. + +```py +class Class4: + def __init__(sam,znach): + sam.__prm=znach + def chten(sam): + return sam.__prm --- геттер + def zapis(sam,znch): + sam.__prm=znch --- сеттер + def stiran(sam): + del sam.__prm --- делеттер + svojstvo=property(chten,zapis,stiran) +``` + +Свойства нужны для того, чтобы инкапсулировать атрибут, т.е. ограничить прямой доступ к изменению атрибута. Еще с их помощью можно проверять правильность введенных данных. + +```py +importlib.reload(mod3) + +from mod3 import Class4 +exempl=Class4(12) +exempl.svojstvo +12 +exempl.svojstvo=45 +print(exempl.svojstvo) +45 +del exempl.svojstvo +exempl.svojstvo +Traceback (most recent call last): + File "", line 1, in + File "D:\STUDY\POAS\Тема9\progs\mod3.py", line 25, in chten + return sam.__prm + ^^^^^^^^^ +AttributeError: 'Class4' object has no attribute '_Class4__prm' + +#Такой вывод происходит, потому что этот атрибут уже удален. +``` + +## Пункт 8. Рассмотрите пример представления в виде класса модели системы автоматического регулиро-вания (САР), состоящей из последовательного соединения усилителя и двух инерционных звеньев, охваченных отрицательной обратной связью с усилителем. + +```py + +# SAU.pu + +class SAU: + def __init__(self, zn_param): + self.param = zn_param + self.ypr = [0, 0] + + def zdn_zn(self, upr): + self.x = upr + + def model(self): + def inerz(x, T, yy): + return (x + T * yy) / (T + 1) + + y0 = self.x - self.ypr[1] * self.param[3] # Обр.связь с усилителем 2 + y1 = self.param[0] * y0 # Усилитель1 + y2 = inerz(y1, self.param[1], self.ypr[0]) # Инерционное звено1 + y3 = inerz(y2, self.param[2], self.ypr[1]) # Инерционное звено2 + self.ypr[0] = y2 + self.ypr[1] = y3 + + def otobraz(self): + print('y=', self.ypr[1]) +``` +Содержимое модуля-программы main_SAU.py с тестированием класса: +```py +from SAU import * +prm=[2.5,4,1.3,0.8] #Параметры модели: коэф.усиления, 2 пост.времени, обратная связь +xx=[0]+[1]*20 #Входной сигнал – «ступенька» +SAUe=SAU(prm) # Создаём экземпляр класса +yt=[] +for xt in xx: # Прохождение входного сигнала + SAUe.zdn_zn(xt) + SAUe.model() + SAUe.otobraz() + yt.append(SAUe.ypr[1]) +import pylab +pylab.plot(yt) +pylab.show() +``` + +Вывод: + +```py +y= 0.0 +y= 0.2173913043478261 +y= 0.4763705103969754 +y= 0.686594887811293 +y= 0.8199324616478645 +y= 0.8837201137353929 +y= 0.8994188484874774 +y= 0.8892777072047301 +y= 0.870097963179993 +y= 0.8518346102696789 +y= 0.8387499784485772 +y= 0.8314204114211459 +y= 0.8286051955249649 +y= 0.8285656555914835 +y= 0.8297915186846528 +y= 0.8312697736438287 +y= 0.8324765218921963 +y= 0.8332456979978418 +y= 0.8336163607592184 +y= 0.8337101315489143 +y= 0.833654237067147 +``` +![график](F1.PNG) \ No newline at end of file diff --git a/TEMA9/task.md b/TEMA9/task.md new file mode 100644 index 0000000..5bca408 --- /dev/null +++ b/TEMA9/task.md @@ -0,0 +1,70 @@ +# Общее контрольное задание по теме 9 + +Криви Анастасия, А-02-23 + +Создайте и запишите в модуль класс, содержащий следующие компоненты: +- конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим фамилии сотрудников, название отделов, названия должностей сотрудников и размеры их окладов, некоторые начальные значения; +- метод для обеспечения операции повышения оклада сотрудника на заданное значение; +- метод для обеспечения перевода сотрудника из одного отдела в другой; +- метод для изменения должности сотрудника; +- свойство, содержащее перечень (список) поощрений сотрудника. +Создайте 2 экземпляра класса, задайте им некоторые значения атрибутов и свойства. Отобразите эти значения. Попробуйте с этими экземплярами операции перевода из отдела в отдел, изменения должности и оклада, объявления благодарности. + +```py +class employee: + def __init__(self, fio, otdel, dolzhnost, oklad): + self.fio = fio + self.otdel = otdel + self.dolzhnost = dolzhnost + self.oklad = oklad + self._pooshrenia = [] + + def salary_raise(self, summa): + if summa > 0: + self.oklad += summa + print(f"Оклад сотрудника {self.fio} увеличен на {summa}. Новый оклад: {self.oklad}") + else: + print("Сумма для повышения оклада должна быть больше нуля.") + + def change_department(self, new_department): + print(f"Сотрудник {self.fio} переведен из отдела {self.otdel} в отдел {new_department}.") + self.otdel = new_department + + def change_position(self, new_position): + print(f"Должность сотрудника {self.fio} изменена с {self.dolzhnost} на {new_position}.") + self.dolzhnost = new_position + + @property + def pooshrenia(self): + return self._pooshrenia + + def add_encouragement(self, tekst): + self._pooshrenia.append(tekst) + print(f"Сотрудник {self.fio} теперь имеет поощрение: {tekst}") + + +emp1 = employee("Сидорова Е.Ю.", "Кафедра Управления и информационных технологий", "Старший преподаватель", 90000) +emp2 = employee("Бауэр В.Ю.", "Дир. ИВТИ", "Заместитель директора института", 120000) + +print(f"{emp1.fio}, {emp1.otdel}, {emp1.dolzhnost}, оклад: {emp1.oklad}") +print(f"{emp2.fio}, {emp2.otdel}, {emp2.dolzhnost}, оклад: {emp2.oklad}") + +emp1.salary_raise(10000) +emp2.change_department("ЭНМИ") +emp1.change_position("Заместитель заведующего кафедрой") +emp2.add_encouragement("За ответственность") +emp1.add_encouragement("За преданность делу") + +print(f"Поощрения {emp1.fio}: {emp1.pooshrenia}") +print(f"Поощрения {emp2.fio}: {emp2.pooshrenia}") + +Сидорова Е.Ю., Кафедра Управления и информационных технологий, Старший преподаватель, оклад: 90000 +Бауэр В.Ю., Дир. ИВТИ, Заместитель директора института, оклад: 120000 +Оклад сотрудника Сидорова Е.Ю. увеличен на 10000. Новый оклад: 100000 +Сотрудник Бауэр В.Ю. переведен из отдела Дир. ИВТИ в отдел Дир. ЭНМИ. +Должность сотрудника Сидорова Е.Ю. изменена с Старший преподаватель на Заместитель заведующего кафедрой. +Сотрудник Бауэр В.Ю. теперь имеет поощрение: За преданность делу +Сотрудник Сидорова Е.Ю. теперь имеет поощрение: За ответственность +Поощрения Сидорова Е.Ю.: ['За ответственность'] +Поощрения Бауэр В.Ю.: ['За преданность делу'] +``` \ No newline at end of file