# Отчёт по теме 9. Создание пользовательских классов и объектов Выполнил Огарков Илья, А-03-23 ## 1. Начало работы Создание текстового файла `report.md` ## 2. Создание классов и их наследников **2.1. Создание автономного класса** ```python 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. Создание класса-наследника** ```python 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. Использование классов, содержащихся в модулях ```python 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. Использование специальных методов ```python 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. Присоединение атрибутов к классу ```python 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. Выявление родительских классов ```python Class3.__bases__ #Родительский класс (,) Class2.__bases__ (,) Class1.__bases__ (,) Class3.__mro__ #Вся цепочка наследования (, , , ) ZeroDivisionError.__mro__ (, , , , ) ``` ## 7. Создание свойства класса ```python example=Class4(12) example.svojstvo 12 example.svojstvo = 45 print(example.svojstvo) 45 del example.svojstvo example.svojstvo ``` ## 8. ```python 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() ```