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()