7.3 KiB
Отчёт по теме 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 <bound method Class1.zad_zn of <main.Class2 object at 0x00000216E07F27B0>> z3.otobrazh() значение= Какое-то значение z1.otobrazh() Новое значение атрибута у экз.1 del z1,z2,z3
3. Использование классов, содержащихся в модулях
from Mod3 import Class1 z4=Class1() z4.otobrazh() Traceback (most recent call last): File "<pyshell#37>", 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 #Родительский класс (<class 'main.Class2'>,) Class2.bases (<class 'main.Class1'>,) Class1.bases (<class 'object'>,)
Class3.mro #Вся цепочка наследования (<class 'main.Class3'>, <class 'main.Class2'>, <class 'main.Class1'>, <class 'object'>)
ZeroDivisionError.mro (<class 'ZeroDivisionError'>, <class 'ArithmeticError'>, <class 'Exception'>, <class 'BaseException'>, <class 'object'>)
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()