Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

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