From ffcb18a323a5fcc81a86fe2b26e8625bd1bafe0b Mon Sep 17 00:00:00 2001 From: TimoshenkoAA Date: Sat, 15 Nov 2025 08:56:09 +0000 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BE=D1=82=D1=87=D0=B5=D1=82=20=D0=BF=D0=BE=20=D0=A2?= =?UTF-8?q?=D0=B5=D0=BC=D0=B5=209?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TEMA9/Figure_1.png | Bin 0 -> 14381 bytes TEMA9/report.md | 302 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 302 insertions(+) create mode 100644 TEMA9/Figure_1.png 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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 import os +>>> os.chdir("C:\\Users\\mapon\\OneDrive\\Рабочий стол\\ПО АС\\ТЕМА9") +``` + +# Пункт 2. Создание классов и их наследников +## Пункт 2.1. Создание автономного класса +``` +>>> class Class1: +... def zad_zn(self, znach): +... self.data = znach # self - ссылка на экземпляр класса +... def otobrazh(self): +... print(self.data) +... +``` +Класс — это шаблон для создания объектов (экземпляров). Он определяет свойства (данные) и методы +(функции), которые будут доступны у созданных объектов. У этого класса есть два метода: +zad_zn (устанавливает значение свойства объекта) и otobrazh (выводит это значение на экран). +Еще у него есть один атрибут - data. + +self — это обязательный первый параметр всех методов в классе ссылающийся на конкретный +экземпляр класса и нужный для определения обращения к атрибутам и методам. +``` +>>> 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 +``` +Если вывести имя экземпляра без чего-либо еще, вернется адрес в памяти +``` +>>> z1 +<__main__.Class1 object at 0x000001BFF0556A50> +``` +## Пункт 2.2. Создание класса-наследника +``` +>>> class Class2(Class1): +... def otobrazh(self): +... print('значение =', self.data) +... +>>> z3 = Class2() +>>> z3 +<__main__.Class2 object at 0x000001BFF0556BA0> +>>> 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. Использование классов, содержащихся в модулях +``` +>>> from mod3 import Class1 +>>> z4 = Class1() +>>> z4.otobrazh() +Traceback (most recent call last): + File "", line 1, in + z4.otobrazh() + File "C:\Users\mapon\OneDrive\Рабочий стол\ПО АС\ТЕМА9\mod3.py", line 5, in otobrazh + print(self.data)#Отображение данных экземпляра +AttributeError: 'Class1' object has no attribute 'data' +``` +Ошибка возникла потому, что otobrazh было вызвано раньше, чем метод, инициализирующий атрибут data. +Проще говоря, мы пытаемся напечатать значение несуществующего объекта. +``` +>>> del z4 +>>> import mod3 +>>> z4 = mod3.Class2() +>>> z4.zad_zn('Класс из модуля') +>>> z4.otobrazh() +значение = Класс из модуля +``` +Здесь otobrazh - это метод класса Class2 и соответствующего ему экземпляра класса z2. Этот метод не +принимает значимых параметров, кроме формального self. +``` +>>> mod3.otobrazh('Объект') +значение объекта = Объект +``` +Здесь otobrazh - это уже просто функция, глобально определенная в модуле mod3. Она определена вне +пользовательского класса, поэтому атрибута data в ее зоне доступа нет. Так что эта функция принимает +один обязательный параметр - выводимую переменную. + +# Пункт 4. Использование специальных методов +``` +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. Присоединение атрибутов к классу +``` +>>> 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), указаны также атрибуты, относящиеся непосредтсвенно к экзаемпляру. dir(Class3) показывает атрибуты +класса Class3. Это включает методы, свойства, и встроенные специальные методы класса, но не атрибуты конкретных объектов, созданных на основе этого класса. +dir(z7) показывает атрибуты объекта z7. Это включает все атрибуты класса, а также любые другие атрибуты, добавленные динамически постфактум. +``` +>>> dir(z7)==dir(Class3) +False +``` +Добавим еще один атрибут: +``` +>>> 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) его не будет: +``` +>>> 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__ +(,) +``` +При этом: +``` +>>> object.__bases__ +() +``` +Полный порядок наследования (Method Resolution Order) +``` +>>> Class3.__mro__ +(, , , ) +>>> ZeroDivisionError.__mro__ +(, , , , ) +>>> IndexError.__mro__ +(, , , , ) +``` +## Пункт 7. Создание свойства класса. +``` +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) +``` +Свойства нужны для того, чтобы инкапсулировать атрибут, т.е. ограничить прямой доступ к изменению атрибута. Еще с их помощью можно проверять правильность +введенных данных. +``` +>>> 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 + exempl.svojstvo + File "C:\Users/mapon/OneDrive/Рабочий стол/ПО АС/ТЕМА9\mod3.py", line 26, in chten + return sam.__prm +AttributeError: 'Class4' object has no attribute '_Class4__prm' +``` +Такой вывод происходит, потому что этот атрибут уже удален. + +## Пункт 8. Рассмотрите пример представления в виде класса модели системы автоматического регулиро-вания (САР), состоящей +из последовательного соединения усилителя и двух инерционных звеньев, охваченных отрицательной обратной связью с усилителем. +``` +=== 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]) +``` +=== testSAU.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() +``` +Вывод: +``` +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 +``` +График сохранен в файле Figure_1. + + + + + + + +