From b5f6053bebf4533ae812247019d4720c77d6f5d9 Mon Sep 17 00:00:00 2001 From: MamakinYR Date: Sun, 7 Dec 2025 18:36:55 +0300 Subject: [PATCH] report:added report --- TEMA9/Figure_1.png | Bin 0 -> 14381 bytes TEMA9/Figure_2.png | Bin 0 -> 16008 bytes TEMA9/Mod3.py | 10 ++ TEMA9/SAU.py | 22 ++++ TEMA9/report.md | 313 +++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 345 insertions(+) create mode 100644 TEMA9/Figure_1.png create mode 100644 TEMA9/Figure_2.png create mode 100644 TEMA9/Mod3.py create mode 100644 TEMA9/SAU.py create mode 100644 TEMA9/report.md diff --git a/TEMA9/Figure_1.png b/TEMA9/Figure_1.png new file mode 100644 index 0000000000000000000000000000000000000000..88bb56176e12a70698c427d2c2c0c9f8e5012dbf GIT binary patch literal 14381 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 literal 0 HcmV?d00001 diff --git a/TEMA9/Mod3.py b/TEMA9/Mod3.py new file mode 100644 index 0000000..bb1968b --- /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..f6957b8 --- /dev/null +++ b/TEMA9/SAU.py @@ -0,0 +1,22 @@ +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..25d4333 --- /dev/null +++ b/TEMA9/report.md @@ -0,0 +1,313 @@ +# Отчет по теме 9 + +Мамакин Ярослав, А-02-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() +>>> z2=Class1() +>>> z1.zad_zn('экз.класса 1') +>>> z2.zad_zn(-632.453) +>>> 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() +значение= Совсем новое +>>> z1.otobrazh() +Новое значение атрибута у экз.1 +>>> del z1,z2,z3 +``` + +## 3 Использование классов, содержащихся в модулях + +Содержимое 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 +>>> from Mod3 import Class1 #Частичный импорт содержимого модуля +>>> z4=Class1() +>>> z4.otobrazh() +Traceback (most recent call last): + File "", line 1, in + z4.otobrazh() + File "C:\Users\uprkt\Desktop\ПО\python-labs\TEMA9\Mod3.py", line 5, in otobrazh + print(self.data)#Отображение данных экземпляра +AttributeError: 'Class1' object has no attribute 'data' +>>> # Параметру data обьекта не было присвоено значение +>>> from Mod3 import Class1 +>>> z4=Class1() +>>> z4.data='значение данного data у экз.4' +>>> z4.otobrazh() +значение данного data у экз.4 +>>> del z4 +>>> import Mod3 +>>> z4=Mod3.Class2() +>>> z4.zad_zn('Класс из модуля') +>>> z4.otobrazh() +значение= Класс из модуля +>>> Mod3.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() +значение= abcdefabcdefabcdef +``` + +## 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='Иванов И.И.' +>>> 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'] +>>> z7=Class3(123) +>>> dir(z7)==dir(Class3) +False +>>> z7.fio +'Иванов И.И.' +>>> 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' +>>> # Свойство было удалено +``` + +## 8 Пример представления в виде класса модели системы автоматического регулирования (САР) + +```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]) +``` + +Проверка работы: +```py +prm=[2.5,4,1.3,0.8] #Параметры модели: коэф.усиления, 2 пост.времени, обратная связь +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]) +... +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 +>>> import pylab +>>> pylab.plot(yt) +[] +>>> pylab.show() +>>> prm=[5.5,2,6.3,0.9] +>>> SAUe=SAU(prm) +>>> yt=[] +>>> for xt in xx: # Прохождение входного сигнала +... SAUe.zdn_zn(xt) +... SAUe.model() +... SAUe.otobraz() +... yt.append(SAUe.ypr[1]) +... +y= 0.0 +y= 0.2511415525114155 +y= 0.5785429828402243 +y= 0.8608684291527201 +y= 1.0405548889736682 +y= 1.1123698572088563 +y= 1.1026104028422206 +y= 1.0485692602883017 +y= 0.9837333929415083 +y= 0.9303020862487426 +y= 0.8979490324812144 +y= 0.8865131776531742 +y= 0.8902188772938274 +y= 0.9016293565437798 +y= 0.9143726153161045 +y= 0.9244204691700071 +y= 0.9301876457452414 +y= 0.931925085592902 +y= 0.9308720026158589 +y= 0.9284995249411967 +y= 0.9260125207356777 +>>> pylab.plot(yt) +[] +>>> pylab.show() +``` + +![lin1](Figure_1.png) +![lin2](Figure_2.png) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +