From 3b9e04afc606c387f238f5d844f7cee1bc4fe88e Mon Sep 17 00:00:00 2001 From: byvs Date: Mon, 8 Dec 2025 03:06:01 +0300 Subject: [PATCH] all is done --- TEMA9/Figure_1.png | Bin 0 -> 14366 bytes TEMA9/Mod3.py | 10 ++ TEMA9/SAU.py | 21 +++ TEMA9/report.md | 324 +++++++++++++++++++++++++++++++++++++++++++++ TEMA9/task.md | 121 +++++++++++++++++ TEMA9/task.py | 27 ++++ TEMA9/testSau.py | 13 ++ 7 files changed, 516 insertions(+) create mode 100644 TEMA9/Figure_1.png create mode 100644 TEMA9/Mod3.py create mode 100644 TEMA9/SAU.py create mode 100644 TEMA9/report.md create mode 100644 TEMA9/task.md create mode 100644 TEMA9/task.py create mode 100644 TEMA9/testSau.py diff --git a/TEMA9/Figure_1.png b/TEMA9/Figure_1.png new file mode 100644 index 0000000000000000000000000000000000000000..7b53a0a60595cf4e4f955bfae0042e441db344cb GIT binary patch literal 14366 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 R0*8WBZ)+-jyk+t9-vE9>Ch-6O literal 0 HcmV?d00001 diff --git a/TEMA9/Mod3.py b/TEMA9/Mod3.py new file mode 100644 index 0000000..ca7fa5b --- /dev/null +++ b/TEMA9/Mod3.py @@ -0,0 +1,10 @@ +class Class1: #Объявление класса Class1 в модуле + def zad_zn(self,znach): # 1 Метод класса + self.data=znach # self - ссылка на экземпляр класса Class1 + def otobrazh(self): # 2 Метод класса + print(self.data)#Отображение данных экземпляра +class Class2(Class1): #Class2 - наследник класса Class1 + def otobrazh(self): # Метод класса Class2 + print('значение=',self.data)#Отображение данных экземпляра +def otobrazh(objekt): #Объявление самостоятельной функции + print('значение объекта=',objekt) diff --git a/TEMA9/SAU.py b/TEMA9/SAU.py new file mode 100644 index 0000000..6f0cc48 --- /dev/null +++ b/TEMA9/SAU.py @@ -0,0 +1,21 @@ +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]) diff --git a/TEMA9/report.md b/TEMA9/report.md new file mode 100644 index 0000000..46edf6a --- /dev/null +++ b/TEMA9/report.md @@ -0,0 +1,324 @@ +# Протокол по Теме 9 + +Степанищев Виктор Романович, А-03-23 + +## 1. Начало работы + +Запуск IDLE, установление рабочего каталога + +## 2. Создание классов и их наследников + +### 2.1. Создание автономного класса + +```py + +class Class1: #Объявление класса + def zad_zn(self,znach): #Метод 1 класса1 – задание значения data + self.data=znach # self - ссылка на экземпляр класса + def otobrazh(self): # Метод 2 класса1 + print(self.data)#Отображение данных экземпляра класса + + +z1=Class1() #Создаём 1-й экземпляр класса +z1 +<__main__.Class1 object at 0x000001F6FDDA5550> +z2=Class1() #Создаём 2-й экземпляр класса +z1.zad_zn('экз.класса 1') #Обращение к методу класса у 1-го экз. +z2.zad_zn(-632.453) #Обращение к методу класса у 2-го экз. +z1.otobrazh() # Обращение ко второму методу класса +экз.класса 1 +z2.otobrazh() +-632.453 +z1.data='Новое значение атрибута у экз.1' +z1.otobrazh() +Новое значение атрибута у экз.1 + + +``` + +### 2.2. Создание класса-наследника + +```py + +class Class2(Class1): #Class2 - наследник класса Class1 + def otobrazh(self): # Метод класса Class2 – переопределяет метод родителя + print('значение=',self.data)#Отображение данных экземпляра + +z3=Class2() +dir(z3) +['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_zn'] +z3.zad_zn('Совсем новое') +z3.otobrazh() +значение= Совсем новое + +``` + +При выводе сработал метод Class2 + +```py + +z1.otobrazh() +Новое значение атрибута у экз.1 + +``` + +Нет, не изменилось, т.к. z1 принадлежит к Class1 + +```py + +del z1,z2,z3 + +``` + +## 3. Использование классов, содержащихся в модулях + +```py + +#Mod3.py + +class Class1: #Объявление класса Class1 в модуле + def zad_zn(self,znach): # 1 Метод класса + self.data=znach # self - ссылка на экземпляр класса Class1 + def otobrazh(self): # 2 Метод класса + print(self.data)#Отображение данных экземпляра +class Class2(Class1): #Class2 - наследник класса Class1 + def otobrazh(self): # Метод класса Class2 + print('значение=',self.data)#Отображение данных экземпляра +def otobrazh(objekt): #Объявление самостоятельной функции + print('значение объекта=',objekt) + + +``` + +```py + +import os,sys +import importlib as imp +os.chdir('C:\\Users\\Viktor\\Desktop\\python-labs\\TEMA9\\') +os.getcwd() + +'C:\\Users\\Viktor\\Desktop\\python-labs\\TEMA9' +from Mod3 import Class1 #Частичный импорт содержимого модуля +z4=Class1() +z4.otobrazh() +Traceback (most recent call last): + File "", line 1, in + z4.otobrazh() + File "C:\Users\Viktor\Desktop\python-labs\TEMA9\Mod3.py", line 5, in otobrazh + print(self.data)#Отображение данных экземпляра +AttributeError: 'Class1' object has no attribute 'data' + +``` + +Ошибка возникла т.к. z4 не имеет никакого значения + + +```py + +from Mod3 import Class1 +z4=Class1() +z4.data='значение данного data у экз.4' +z4.otobrazh() +значение данного data у экз.4 + +``` + +```py + +del z4 +import Mod3 #Полный импорт содержимого модуля +z4=Mod3.Class2() +z4.zad_zn('Класс из модуля') +z4.otobrazh() +значение= Класс из модуля +Mod3.otobrazh('Объект') +значение объекта= Объект + +``` + +Это вызвало самостоятельную функцию otobrazh() из модуля,которая принимает любой объект и печатает его с префиксом "значение объекта =" + + +## 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 + +z5=Class3('abc') #При создании экземпляра срабатывает конструктор +z5.otobrazh() +значение= abc +z6=z5+'def' +z6.otobrazh() +значение= abcdef +z6.zad_dr_zn(3) +z6.otobrazh() +значение= abcdefabcdefabcde + +``` + +## 5. Присоединение атрибутов к классу. + +```py + +dir(Class3) +['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_dr_zn', 'zad_zn'] +Class3.fio='Иванов И.И.' +z7=Class3(123) +dir(z7)==dir(Class3) +False +dir(z7.fio) +['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill'] +dir(z7.fio)==dir(Class3.fio) +True +z7.rozden='1987' +dir(z7) +['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'data', 'fio', 'otobrazh', 'rozden', 'zad_dr_zn', 'zad_zn'] +dir(Class3) +['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn'] + +``` + +## 6. Выявление родительских классов + +```py + +Class3.__bases__ +(,) +Class2.__bases__ +(,) +Class1.__bases__ +(,) +Class3.__mro__ +(, , , ) +ZeroDivisionError.__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) + +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 + exempl.svojstvo + File "", line 5, in chten + return sam.__prm +AttributeError: 'Class4' object has no attribute '_Class4__prm' + +``` + +Потому что атрибут __prm больше не существует + +## 8. Рассмотрите пример представления в виде класса модели системы автоматического регулирования (САР), состоящей из последовательного соединения усилителя и двух инерционных звеньев, охваченных отрицательной обратной связью с усилителем. + +```py + +# SAU.py + +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]) + + +#testSau.py + +prm=[2.5,4,1.3,0.8] +from SAU import * +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() + + + + +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 + +``` + +**Результат:** + + + + + + + + + + + + diff --git a/TEMA9/task.md b/TEMA9/task.md new file mode 100644 index 0000000..482f612 --- /dev/null +++ b/TEMA9/task.md @@ -0,0 +1,121 @@ +# Общее контрольное задание по теме 9 + +Степанищев Виктор Романович, А-03-23 + +## Задание + +Создайте и запишите в модуль класс, содержащий следующие компоненты: + +-конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим фамилии сотрудников, название отделов, названия должностей сотрудников и размеры их окладов, некоторые начальные значения; + +-метод для обеспечения операции повышения оклада сотрудника на заданное значение; + +-метод для обеспечения перевода сотрудника из одного отдела в другой; + +-метод для изменения должности сотрудника; + +-свойство, содержащее перечень (список) поощрений сотрудника. + +-Создайте 2 экземпляра класса, задайте им некоторые значения атрибутов и свойства. Отобрази-те эти значения. Попробуйте с этими экземплярами операции перевода из отдела в отдел, изме-нения должности и оклада, объявления благодарности. + +```py +#task.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): + self.oklad += summa + print(f"Оклад сотрудника {self.fio} увеличен на {summa}. Новый оклад: {self.oklad}") + + 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}") + +``` + + +```py + +import os, sys +os.chdir('C:\\Users\\Viktor\\Desktop\\python-labs\\TEMA9\\') +os.getcwd() + +'C:\\Users\\Viktor\\Desktop\\python-labs\\TEMA9' +from task import * +emp1 = Employee('Челышев Эдуард Артурович', 'ВМСС', 'Ассистент', 76000) +emp2 = Employee('Бобряков Александр Владимирович', 'УИТ', 'Заведующий кафедрой', 760000) +emp1.change_department('УИТ') +Сотрудник Челышев Эдуард Артурович переведен из отдела ВМСС в отдел УИТ. +emp1.otdel +'УИТ' +emp1.change_position('Старший преподаватель') +Должность сотрудника Челышев Эдуард Артурович изменена с Ассистент на Старший преподаватель. +emp1.dolzhnost +'Старший преподаватель' +emp2.salary_raise(-100000) +Оклад сотрудника Бобряков Александр Владимирович увеличен на -100000. Новый оклад: 660000 +emp2.oklad +660000 +emp2.add_encouragement('За победу в конкурсе "лучшая кафедра"') +Сотрудник Бобряков Александр Владимирович теперь имеет поощрение: За победу в конкурсе "лучшая кафедра" +emp2.pooshrenia +['За победу в конкурсе "лучшая кафедра"'] + +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/TEMA9/task.py b/TEMA9/task.py new file mode 100644 index 0000000..5d035a9 --- /dev/null +++ b/TEMA9/task.py @@ -0,0 +1,27 @@ +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): + self.oklad += summa + print(f"Оклад сотрудника {self.fio} увеличен на {summa}. Новый оклад: {self.oklad}") + + 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}") diff --git a/TEMA9/testSau.py b/TEMA9/testSau.py new file mode 100644 index 0000000..5001f67 --- /dev/null +++ b/TEMA9/testSau.py @@ -0,0 +1,13 @@ +prm=[2.5,4,1.3,0.8] +from SAU import * +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()