From ebb5e9050f35f01b7baa2de405b07a9ae4898ddc Mon Sep 17 00:00:00 2001 From: Ogarkov Ilya Date: Sun, 7 Dec 2025 18:42:04 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D1=81=D0=BD=D0=BE=D0=B2=D0=BD=D0=B0?= =?UTF-8?q?=D1=8F=20=D1=87=D0=B0=D1=81=D1=82=D1=8C=20=D0=BB=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=80=D0=B0=D1=82=D0=BE=D1=80=D0=BD=D0=BE=D0=B9=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=E2=84=969=20=D1=81=D0=B4?= =?UTF-8?q?=D0=B5=D0=BB=D0=B0=D0=BD=D0=B0=20=D0=BA=D1=80=D0=BE=D0=BC=D0=B5?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D1=8C=D0=BD=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TEMA9/Mod3.py | 20 ++++++ TEMA9/SAU.py | 21 ++++++ TEMA9/main_SAU.py | 13 ++++ TEMA9/report.md | 180 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 234 insertions(+) create mode 100644 TEMA9/Mod3.py create mode 100644 TEMA9/SAU.py create mode 100644 TEMA9/main_SAU.py create mode 100644 TEMA9/report.md diff --git a/TEMA9/Mod3.py b/TEMA9/Mod3.py new file mode 100644 index 0000000..30b00f9 --- /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) 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/main_SAU.py b/TEMA9/main_SAU.py new file mode 100644 index 0000000..73e6070 --- /dev/null +++ b/TEMA9/main_SAU.py @@ -0,0 +1,13 @@ +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/report.md b/TEMA9/report.md new file mode 100644 index 0000000..50c8464 --- /dev/null +++ b/TEMA9/report.md @@ -0,0 +1,180 @@ +# Отчёт по теме 9. Создание пользовательских классов и объектов +Выполнил Огарков Илья, А-03-23 + +## 1. Начало работы + +Создание текстового файла `report.md` + +## 2. Создание классов и их наследников +2.1. Создание автономного класса + +class Class1: + def zad_zn(self,znach): + self.data=znach + def otobrazh(self): + 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. Создание класса-наследника + +class Class2(Class1): + def otobrazh(self): + print('значение=',self.data) + +z3=Class2() +z3 +<__main__.Class2 object at 0x00000216E07F27B0> +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 +<__main__.Class2 object at 0x00000216E07F27B0> +z3.zad_zn +> +z3.otobrazh() +значение= Какое-то значение +z1.otobrazh() +Новое значение атрибута у экз.1 +del z1,z2,z3 + +## 3. Использование классов, содержащихся в модулях + +from Mod3 import Class1 +z4=Class1() +z4.otobrazh() +Traceback (most recent call last): + File "", line 1, in + z4.otobrazh() + File "C:\Users\Ilya\Desktop\python-labs\TEMA9\Mod3.py", line 9, in otobrazh + print(self.data)#Отображение данных экземпляра +AttributeError: 'Class1' object has no attribute 'data' +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. Использование специальных методов + +class Class3(Class2): + 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. Присоединение атрибутов к классу + +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) +['__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', 'zad_dr_zn', 'zad_zn'] +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. Выявление родительских классов + +Class3.__bases__ #Родительский класс +(,) +Class2.__bases__ +(,) +Class1.__bases__ +(,) + +Class3.__mro__ #Вся цепочка наследования +(, , , ) + +ZeroDivisionError.__mro__ +(, , , , ) + +## 7. Создание свойства класса + +example=Class4(12) +example.svojstvo +12 +example.svojstvo = 45 +print(example.svojstvo) +45 +del example.svojstvo +example.svojstvo + +## 8. + +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 +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()