From e3626c5feb9bc6988e585799735ad5b267975f8b Mon Sep 17 00:00:00 2001 From: DobrovolskaY Date: Sun, 14 Dec 2025 16:57:49 +0000 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=B8?= =?UTF-8?q?=D0=BB(=D0=B0)=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20=D0=B2=20'TEM?= =?UTF-8?q?A9'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TEMA9/MAIN_SAU.py | 16 +++ TEMA9/Mod3.py | 20 ++++ TEMA9/Pic0.png | Bin 0 -> 31704 bytes TEMA9/report.md | 272 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 308 insertions(+) create mode 100644 TEMA9/MAIN_SAU.py create mode 100644 TEMA9/Mod3.py create mode 100644 TEMA9/Pic0.png create mode 100644 TEMA9/report.md diff --git a/TEMA9/MAIN_SAU.py b/TEMA9/MAIN_SAU.py new file mode 100644 index 0000000..5902772 --- /dev/null +++ b/TEMA9/MAIN_SAU.py @@ -0,0 +1,16 @@ +###main_SAU + +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]) + +import pylab +pylab.plot(yt) +pylab.show() diff --git a/TEMA9/Mod3.py b/TEMA9/Mod3.py new file mode 100644 index 0000000..e051703 --- /dev/null +++ b/TEMA9/Mod3.py @@ -0,0 +1,20 @@ +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) + +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 diff --git a/TEMA9/Pic0.png b/TEMA9/Pic0.png new file mode 100644 index 0000000000000000000000000000000000000000..f78c16ed605da4e5c7e101ecac4e15d85d5f12e1 GIT binary patch literal 31704 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 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-й экземпляр класса +>>> 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() +значение= Совсем новое +>>> 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) +``` + +Далее импортирован класс из этого модуля (при вызове метода otobrazh была выведена ошибка, так как не было задано значение обьекта с помощью метода zad_zn, которое и должно выводиться на печать): + +```py +>>> from Mod3 import Class1 #Частичный импорт содержимого модуля +>>> z4=Class1() +>>> z4.otobrazh() +Traceback (most recent call last): + File "", line 1, in + z4.otobrazh() + File "C:\Users\Лиза\OneDrive\Desktop\python-labs\TEMA9\Mod3.py", line 5, in otobrazh + print(self.data)#Отображение данных экземпляра +AttributeError: 'Class1' object has no attribute 'data' +``` +Далее была произведена еще попытка печати, но предварительно было задано знаечние обьекта: + +```py +>>> from Mod3 import Class1 +>>> z4=Class1() +>>> z4.data='значение данного data у экз.4' +>>> z4.otobrazh() +значение данного data у экз.4 +``` + +Потом был импортирован весь модуль и из него с использованием разных методов был вызван otobrazh: + +```py +>>> 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='Иванов И.И.' +>>> 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'] +>>> 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]) +``` + +Была создана основная программа для формирования САУ с помощью модуля SAU: + +```py +###main_SAU + +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]) + +import pylab +pylab.plot(yt) +pylab.show() +``` + +Был запущен модуль MAIN_SAU + +```py +=============== RESTART: C:/Users/Лиза/OneDrive/Desktop/python-labs/TEMA9/MAIN_SAU.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 +``` + +![](pic0.png) + +## 9 Завершение работы + +Сеанс в IDLE был завершен! + +