From b8abd81a81be69b53a2856bf78d7e126c77af74a Mon Sep 17 00:00:00 2001 From: BerezhkovDA Date: Fri, 19 Dec 2025 01:55:26 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BE=D1=82=D1=87=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TEMA8/report.md | 4 +- TEMA9/figure1.png | Bin 0 -> 20522 bytes TEMA9/report.md | 242 ++++++++++++++++++++++++++++++++++++++++++++++ TEMA9/task.md | 70 ++++++++++++++ 4 files changed, 314 insertions(+), 2 deletions(-) create mode 100644 TEMA9/figure1.png create mode 100644 TEMA9/report.md create mode 100644 TEMA9/task.md diff --git a/TEMA8/report.md b/TEMA8/report.md index 02bcbcc..51a5d1e 100644 --- a/TEMA8/report.md +++ b/TEMA8/report.md @@ -65,8 +65,6 @@ Mod1:Значение perm1= 7 >>> perm1 '7' ``` -Функция exec() не возвращает результат выполнения кода, только выполняет его, позволяет программе динамически генерировать и исполнять код. - ## 2.4 Использование инструкции from … import … Пример 1 ```py @@ -337,6 +335,8 @@ perm1= 4 tt= 9 ****BETA**** qq= 1902773895292.1592 +>>> Mod0.Mod1.perm1=str(int(Mod0.Mod1.perm1)*2)) +SyntaxError: unmatched ')' >>> Mod0.Mod1.perm1=str(int(Mod0.Mod1.perm1)*2) >>> Mod0.Mod1.perm1 '24' diff --git a/TEMA9/figure1.png b/TEMA9/figure1.png new file mode 100644 index 0000000000000000000000000000000000000000..044397edec64a4c5266de0d78ae36218366db18a GIT binary patch literal 20522 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 YZcy`z_Nr7V;ENFQvdVYzr5`-|AC>> import os +>>> os.chdir('C:\\MPEI\\PO_ASY\\BerezhkovGit\\python-labs\\Tema9') +``` +# 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)#Отображение данных экземпляра класса +``` +```py +>>> 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: +```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:\MPEI\PO_ASY\BerezhkovGit\python-labs\Tema9\Mod3.py", line 5, in otobrazh + print(self.data)#Отображение данных экземпляра +AttributeError: 'Class1' object has no attribute 'data' +``` +Ошибка т.к. объект z4 не имеет атрибута data. + +```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 +... def __str__(self): +... return self.data +... +... +>>> 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' +``` +Ошибка т.к. атрибут __prm больше не существует + +# 8. Рассмотрите пример представления в виде класса модели системы автоматического регулиро-вания (САР), состоящей из последовательного соединения усилителя и двух инерционных звеньев, охваченных отрицательной обратной связью с усилителем. +Модуль SAU.py: +```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]) +``` +Тестирование программой main_SAU.py: +```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() +``` +```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 +``` +График: + + diff --git a/TEMA9/task.md b/TEMA9/task.md new file mode 100644 index 0000000..68358fd --- /dev/null +++ b/TEMA9/task.md @@ -0,0 +1,70 @@ +# Общее контрольное задание по теме 9 +Бережков Дмитрий А-01-23 +## Задание: + +Создайте и запишите в модуль класс, содержащий следующие компоненты: +- конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим фамилии сотрудников, название отделов, названия должностей сотрудников и размеры их окладов, некоторые начальные значения; +- метод для обеспечения операции повышения оклада сотрудника на заданное значение; +- метод для обеспечения перевода сотрудника из одного отдела в другой; +- метод для изменения должности сотрудника; +- свойство, содержащее перечень (список) поощрений сотрудника. +Создайте 2 экземпляра класса, задайте им некоторые значения атрибутов и свойства. Отобра-зите эти значения. Попробуйте с этими экземплярами операции перевода из отдела в отдел, изменения должности и оклада, объявления благодарности. + +## Решение: +```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 +>>> from task import * +>>> emp1 = Employee('Челышев Эдуард Артурович', 'ВМСС', 'Ассистент', 77777) +>>> emp2 = Employee('Бобряков Александр Владимирович', 'УИТ', 'Заведующий кафедрой', 777777) +>>> emp1.change_department('УИТ') +Сотрудник Челышев Эдуард Артурович переведен из отдела ВМСС в отдел УИТ. +>>> emp1.change_department('УИТ') +Сотрудник Челышев Эдуард Артурович переведен из отдела УИТ в отдел УИТ. +>>> emp1.otdelemp1 = Employee('Челышев Эдуард Артурович', 'ВМСС', 'Ассистент', 77777) +>>> emp1 = Employee('Челышев Эдуард Артурович', 'ВМСС', 'Ассистент', 77777) +>>> emp2 = Employee('Бобряков Александр Владимирович', 'УИТ', 'Заведующий кафедрой', 777777) +>>> emp1.change_department('УИТ') +Сотрудник Челышев Эдуард Артурович переведен из отдела ВМСС в отдел УИТ. +>>> emp1.otdel +'УИТ' +>>> emp1.change_position('Старший преподаватель') +Должность сотрудника Челышев Эдуард Артурович изменена с Ассистент на Старший преподаватель. +>>> emp1.dolzhnost +'Старший преподаватель' +>>> emp2.salary_raise(-100000) +Оклад сотрудника Бобряков Александр Владимирович увеличен на -100000. Новый оклад: 677777 +>>> emp2.oklad +677777 +>>> emp2.add_encouragement('За победу в конкурсе "лучшая кафедра"') +Сотрудник Бобряков Александр Владимирович теперь имеет поощрение: За победу в конкурсе "лучшая кафедра" +>>> emp2.pooshrenia +['За победу в конкурсе "лучшая кафедра"'] +``` \ No newline at end of file