From 08a841b0e2a78e66f6b83482adff153033ac1bea Mon Sep 17 00:00:00 2001 From: Dmitry Kolomeytsev Date: Sun, 14 Dec 2025 23:19:35 +0300 Subject: [PATCH] task done --- TEMA9/Employee.py | 63 ++++++++ TEMA9/Mod3.py | 12 ++ TEMA9/SAU.py | 21 +++ TEMA9/main_SAU.py | 19 +++ TEMA9/pictures/image-1.png | Bin 0 -> 29171 bytes TEMA9/pictures/image.png | Bin 0 -> 25263 bytes TEMA9/report.md | 295 ++++++++++++++++++++++++++++++++++++- TEMA9/task.md | 137 ++++++++++++++++- 8 files changed, 544 insertions(+), 3 deletions(-) create mode 100644 TEMA9/Employee.py create mode 100644 TEMA9/Mod3.py create mode 100644 TEMA9/SAU.py create mode 100644 TEMA9/main_SAU.py create mode 100644 TEMA9/pictures/image-1.png create mode 100644 TEMA9/pictures/image.png diff --git a/TEMA9/Employee.py b/TEMA9/Employee.py new file mode 100644 index 0000000..eb320b9 --- /dev/null +++ b/TEMA9/Employee.py @@ -0,0 +1,63 @@ +class Employee: + """Класс, описывающий основные данные о сотруднике организации""" + + def __init__(self, fio = "", otdel = "", dolzhnost = "", oklad = 0): + self.fio = fio + self.otdel = otdel + self.dolzhnost = dolzhnost + self.oklad = oklad + self.__pooshreniya = [] + self.pooshreniya = property( + self.get_pooshreniya, + self.set_pooshreniya, + self.del_pooshreniya + ) + + def change_oklad(self, diff): + if (self.oklad + diff <= 0): + print("Оклад сотрудника не может быть меньше либо равен 0") + else: + self.oklad += diff + print(f"Оклад сотрудника {self.fio} был {'увеличен' if diff >= 0 else 'уменьшен'} на {abs(diff)}") + + def change_otdel(self, new_otdel): + old_otdel = self.otdel + self.otdel = new_otdel + print(f"Сотрудник {self.fio} был переведен из отдела '{old_otdel}' в '{new_otdel}'") + + def change_dolzhnost(self, new_dolzhnost): + old_dolzhnost = self.dolzhnost + self.dolzhnost = new_dolzhnost + print(f"Должность сотрудника {self.fio} была изменена с '{old_dolzhnost}' на '{new_dolzhnost}'") + + def get_pooshreniya(self): + return list(self.__pooshreniya) + + def set_pooshreniya(self, value): + if isinstance(value, str): + self.__pooshreniya.append(value) + print(f"Добавлено поощрение для сотрудника {self.fio}: '{value}'") + elif isinstance(value, list): + self.__pooshreniya.extend(value) + print(f"Добавлены поощрения для сотрудника {self.fio}: {value}") + else: + print("Поощрение должно быть строкой или списком строк") + + def del_pooshreniya(self, item = ""): + if not item: + self.__pooshreniya.clear() + print(f"Список поощрений сотрудника {self.fio} очищен") + elif item in self.__pooshreniya: + self.__pooshreniya.remove(item) + print(f"Поощрение {item} сотрудника {self.fio} удалено") + else: + print(f"Такого поощрения нет в списке поощрений сотрудника {self.fio}") + + def get_employee_info(self): + print(f""" + ФИО: {self.fio} + Отдел: {self.otdel} + Должность: {self.dolzhnost} + Оклад: {self.oklad} руб. + Поощрения: {self.__pooshreniya if self.__pooshreniya else 'нет'} + """) diff --git a/TEMA9/Mod3.py b/TEMA9/Mod3.py new file mode 100644 index 0000000..4ce1489 --- /dev/null +++ b/TEMA9/Mod3.py @@ -0,0 +1,12 @@ +class Class1: + def zad_zn(self, znach): + self.data = znach + def otobrazh(self): + print(self.data) + +class Class2(Class1): + def otobrazh(self): + print("Значение =", self.data) + +def otobrazh(obj): + print("Значение объекта =", obj) diff --git a/TEMA9/SAU.py b/TEMA9/SAU.py new file mode 100644 index 0000000..dcf3ec8 --- /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] + y1 = self.param[0] * y0 + y2 = inerz(y1, self.param[1], self.ypr[0]) + y3 = inerz(y2, self.param[2], self.ypr[1]) + self.ypr[0] = y2 + self.ypr[1] = y3 + + def otobrazh(self): + print("y =", self.ypr[1]) diff --git a/TEMA9/main_SAU.py b/TEMA9/main_SAU.py new file mode 100644 index 0000000..72d0b60 --- /dev/null +++ b/TEMA9/main_SAU.py @@ -0,0 +1,19 @@ +from SAU import * +prm = [2.5, 4, 1.3, 0.8] +xx = [0] + [1] * 20 +SAUe = SAU(prm) +yt = [] + +for xt in xx: + SAUe.zdn_zn(xt) + SAUe.model() + SAUe.otobrazh() + yt.append(SAUe.ypr[1]) + +import pylab +pylab.plot(yt) +pylab.title("График выходного сигнала") +pylab.xlabel("Время - t") +pylab.ylabel("Выходной сигнал - y(t)") +pylab.grid(True) +pylab.show() diff --git a/TEMA9/pictures/image-1.png b/TEMA9/pictures/image-1.png new file mode 100644 index 0000000000000000000000000000000000000000..7227947a4321a05b0d9c181464897e85b484e821 GIT binary patch literal 29171 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

{u#JDQe=(q?vS$#mem&?O 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 BZQcL? literal 0 HcmV?d00001 diff --git a/TEMA9/pictures/image.png b/TEMA9/pictures/image.png new file mode 100644 index 0000000000000000000000000000000000000000..06d3db38018386e8031882503bf9ff13721f731c GIT binary patch literal 25263 zcmZ^~WmsHW5-toR1PkuaNN{&)+}+(na0~9igIg2aA-F?uclY4#?(X(=X3m^@X1;s- z2M^EQ)wNdDDt%XVsG__CB0L^E1Ox=4l%%LK1jIXY@c-ekP~g9*vh+(35X2BtqC%=} zkjLpTy3@OF{m7>d{zm>kH@}2v*V3G-9TfwM)sBRFrF_b@>(!Qyy=@rIXDtb@450nS^*9Y-@*KY&-{BV23@!2 zeb8Vmc+jyNI@ z4^N}+>A?Zl*LfyW$YehwBct}GQyv%?m@3`5a=jccY&y-~H5OCKdD4SB4n#zm>+9?F zwri7Zvcc!aNtGRl?|pskpn560`1|98fbh0lC}^+{eo*LN;Doe+EaX3fgJH^&H8&2P zBS;YV(wmA!tZ86Mvl7J>TmaX%eXeA7MrC`=Q(hDxFq)?CngpoL*oJhe`_RxC>1ic zx3|;yy%sfr@)^7jeUbRES$Ah^oVKgaZv}Jl(s|-J2I7<}V5vX|8eoG(5ne|?2N?%D zE}b*EMVk@z=u7E zp(!2hY?(Hk!RGEtv_lXzYMeMM+j$R9Yi~M43_t~d-3fyTG6BUnog@H!b_%yz zsHmu>fut+V%yV*85t)1*90Vi1y?GiHpUuY7vbukyj1LbV9ZVG@Cnx9rTB*+RnMcvrgI2u+WK+)6l`KOS7OH0c@Tv=I}LI$r?LiDt! z6XpKyE(O@58T6X$x5S(7jJbtHMCegKu%9BubCiqP9(M7gB{6Vt21Jr1fTqUAZXO=t zqS>ph9wjrD8KMDZ{jsoa;285I##hSSb!pQ7)CWbFLWP4GUaK+rqY;ORDaiKu<%(83y zP<-osps^VMp&SB|xI>{Mx24(opcBIYye-d7Dh(fseHL@EPy)QEcH~--gst(etSkld}^wU?S;IYoER*-xKd9Pl+*F*I z8XzJflBZl0A3u{V7M|p%6?$&g9|l_hwmePoe{B1esViDNGS|PIO*Ykjqc9Hyb>fN| zdW~B2ex318^zQJ5PytRpM$H(wySY8zt@*%yDu)2ODA|;OSd05rzL058sB#gRzX6Uo zHyPUCLbci8wZ*7}c&-GXR@=JXW<``FT9xMJ?#_0mIKHH$M3U^=)o!GEiAk?vI*WCK z;~q$otcz)6X({zp&?ueTd4LIQTHt_Az~e%uz-hC*zqO@OuFEw!29HT|e}8|xP%Tk1 zv$(hzL;91Y&;IUIuS|VdHb8(U-(dX%c(;a72v~IMb866+>AdbN)}e!O2&8}qmHd<3 zC*=)rPKvA5E~CoihNl4(xt(MGD?g?P`hP$ih@{gl;}8(Y{F6*(XJ?U+kl3we)4)6) zyuQ|IkA4)qvm%M6Vr7j54K&I38SWCGp-qB=U>GLtkTFZ1@(Bv4^JNzWm!wjSJp*q^2u9+ruCBzmrj-;o zBzyha|CQ9`p|&4+BgI96zR=H+w$~+r?Wx}kTCgWNHFelI9VE$fd3D8(hxl@V7bzZ_ zm?-fSGY4ieNL#8>t1b6=!m>8EfekkTGh9B+iOG=?K@#T6#K8DCCBndSW=*7fpiAse z&CqjWi9LirbqO5>lk4g75&(w2F@gZVY@?6{jIQf39_o`yZZS-2TZkK^GPW$;r(m2k zNTS}`-VRw+k`M|c#YBDuXEliT|1N9Rhsl`C#sJ#Fn5)bNUGMRx_L44}UC%_drVW%Q zFLiS_JN5sjg@E-;es4OSq36~rS-@no4E#gwpst>&j(<0PI0| ztPcPc@0-K;edzxs>gn$vr)x5Ldwp@D$TS*a{M>@V7x?ZUe85a$iHX1cD_Z_z0Te;O zYl#1;%!qw`_Zj|s0YO0sNF^3$;ybLD&jo^FJVWMO>d4 zBB2w# zAWAhmT3V~nuC^LmzBi$2;aFvyPqIJ+%iK^hc+Ugn<>F|9XBuv5rsOi69aBh^`gCKB zD5aFrVuRTfrFp~VAKt)*jMA@f)V)YOw;wET&u7-w1l(`VgHTudAGE&C zs=&Q9*F-L7EiINzH%iCjEmlOdETqNWmkro!P7-s)d>{U|k`-fMH7Ni)b!GX1XEOv! z%uMd*GvDRn-wh=C#}9nf#0eLcquZ8j74 z-XaMU`CcD4sOq0=ZeQo;-#wAmSLgwoRM3VaVc@oy9Q33h!9P!K6V)LXW4z^O#FIIi0&sJ>{o zJWl##X!elJ{RuZ=Y`b>uzOfJ?!`^#u`&La4)8Xk7@sTloCX!Fh%URA$ht|?~dXfGM zYv%f7>JM)x?RQ!SZ8{Oc=qaV04eYGVo+mb>DhXvvu436Xr9;M$$tX!SUh2;bTi^8; z`D%)%+h$0V2a`tP*e(-I(4R}zjcM5MY7S9sjJ10diA8 zn)Z*Gi&IJ>oRPq0+1q;cjlFQ4IF?3Q&4Sf%MM-!*S`5F@xaLj6B>njK=DDJW;biGo zc8)Av0*{;O8IUpvk12O_+eugJEhjwt;ro=E{|Jz|xk#otw0)X(#j6{WSA4N8vt*zo z5+u*6`PN|(H00#JO*Pi;<9()Se=eV<)3+d2hA}%PP~IA`_svA)PMNR=hreJZh_LUZ z$F66>n8$!aa?05_2`=qF-5W8iC&Y%Ey^N17b~~huDl#6sc_HGozA_4Le8-(w*22?PlJ%vvgiOCW9_Zkm>~B5Hcne%vB-Uh~rKN$yM; z$Zdm6QCGog__W}pwit@|;(5~6cVeK17^~2Cpq9Rj*(Sg+kLyGA?PcGzJPa@AE#&a;lQ4rYy}{n=|>Ua z{V?wR0-@ZOELL`0venJ89SsgF(Dqun;VHps)!Zyj&Wx-{@DcQJ3> zALoZvLB8!9<`N}OC@OIt9!4ztSB-u)Z4v+)#G)NGA{7RX*|YYaB`D!Ho@aV zU|x~3>&MGdUS5`y$rOe>JXyY&^2fVz`CFHh*A8+(HBG4Lm#-f*{I}`k7gtf^PqgXz z6Qk=~Mb*x{Nt@$rm~QO8Jx&}Te#MjJQTCn0St0I8Cn28&!ds^4IvY#EkNqcQ{RwaZ zq>d8?(?SltpRP8B>^ExofSlMZOD9`*j3ltY4dg3H?)_JSqcpY{= z6wYg^YKrwzf|FQIh>(#Won=hFm09CZOD98e?w9yXVWxMq74sda?21@ac>L><#tae{ zg6fpYOp(r0qFSAfkWow1 zE{unvV^bEju2~Tej0O`U0Mj`ikbM%0bLhVmYuaEN+6iBwC05dVO-#{-q%`3)Huy2y z95J6D?*Rt&S&jOMg3~F1OWktP{rCM^9oZ}GeS83w+TqwI%pEWv>B!9ey;ZLlOtrqj z#?iEwM9PA%M2hmOU$~Hh`GZ3k=dFWZ$37rv6V;_5vdbt%}>twEIe#u zo)FNWzRS=Zi7dxoA@(5Mb#@}>?1!~Xd#{P^tjhF5+@%xxuf&Z8r%43}tgx3|nOzgP zIDuMmd53_KGO0j=nNeERO|#;gBkk;Lts#*!e(@`)mTmx`{}Y$5iQ9DTp+e^VD*l2i zV_HuL(|WO@Wk^dfe-T_Wq!?tcAM~4Y#BHj~q$NAR_YWA1u!A(_TpVdu%w(iL1se5T zXhq5?s2N2RS&Ef~ULV^pp8gDj#sYn=v198b>Q8pzx4D`e6mYgWv?w?~#m>gJ!Tj(D zHa7X8vxJ_v*`cBxVb2?D?d$zRLa(<4&bItz*B-)6=wK}`-q8+Kf3{D6!OcRJF?t)5 zBOb#gqIBKVQNCm>&McQk{!gF$O!RzoCFoo*OxucT0gpwNV=i3`(M8-)8&oy$#DG6l z*w6QU@+Gw(W z&}g}o>yZoZ)%rnd*6rkXhd4Sz z_Pq`1`+=lpJO+u9mf0ZSrT^d64;)6booW$75Yl-*4YK@;8_3P*$^X{Yl&B zol(xMp00Al=7^NLx!v>qcTX;*cx!dvr^^pYyAJ?e(bc{qW~@`AsXX22j18xbyb~TS z<@#*9!H4&IZlh`ki3sA0mGh2qR41}7w)bUdW_Ef6 znw|#8??ZBEwzidhuszy;&OAjCM!tHu#a2mM6s_VT5Vw?zzASbK?M@hOPyTLYp4d1t zgPu0@21%GH#Gjd=-##x+>X}6u%rHHyry4C|w5?#Dh6w;#4L(+KePD!yd8-N05<*W1 z6elN32V%4prY3G4T|m#PMzh?C?DODAFC;9P)FXhk%@)eS=yO&kx`Kg#kdo#)(1^ z2?C2%E&7G~TrO$N7`wNT^1Se0nJCCYwXaMw8ZQ=oj+7za)^+s8Pm=cadq-2lOud-M_ zia3&NuEZ!renZz+p$#9ecpW|>C!v0mtvHZ1l^#g>(EiL{7gozI=#=)Vs=xXMkdj(wuDaOg}lG5s&PZi%_Mv^Q!A^ zO_TN|k$j8tp14$1HzA<{>LB(0*w?!URiWFMhnXgNkb`vkJuJ+>J1FuXU+AvNo?q1N z(7lujn2#?4Vi3OM)nUY9lG%lDf&`fCN|MNbTD5a%bcl_6XpQop*?RCg+#Y(yo1rTG zw`I5s^D~5*@z@wjio_`7-x+;xldE)T?(Plz}d(_H~0b;0s zkV;d4+fnlB)vW1%w3$>);D^xSA5j03vBB~yvVhxBy5t+AJTUC@pGIEL@6SUfmJo

S3dikI4NV7pQY~bMG4dMAeUrPYk=Mp&*!a}--@T%=Eiq}jw zXG?5rx@a}iQ7i4n7IO=ZsSYF7@FWSK?si}miY0}MZ3E=?SF;leO3=Euxi)>xk((gLf) zCP>y2I&M|P;j((?EygAz8eSy~w4c_R}j z1iPcBH$TufBt5~Z`{jy#jbk<68vjUtRF7JtNyApaAn}kOoxn%;BwTK7cz{Rsu03~X z+wsBaxC`iJzD+=&CiL|Oy*G(<+h$$9AQxUNo$AnYDas}_szKfDL>@%JRca}>DRnQGwBi&gW_z=dud5Z`W1(WX)C-r~ zuXkx5v3&2n5HFc|H)w4Q9@Dyddg-@qP8w{-USH+aMYm#Hk-SVav!fiuoqU^S8O~7q zoTq$py)Sc!{ba+_e5E#UqzPnC?vr69q-HvgvcU*GHtyrodA^OIRXs!M8LT(&w&+cD z;%s_mUz{fJGKw5< zG`Jkqam~POIW|sDndta@tXu!~{NubeIyEu!RI%}LpgXQ+x(&!yp0BK2Jn>_VLrnCm z4xg*0)!Nw{|FjxOJ0qih8=h$3fg?OR_C>8r74R%$wbA)%`Pp<*K@>=GlPXcq!fFf1 zR3h3!1rZfwZd*gHKRlo?VS(bzr(g1Fx6DWYmEtnx2N^Jn8c!b*YWwi$UlsP>ZK|My zN?qbSY^2#kOM7Yjq%}*_w^kZ=Pc!NB=r%$e&h*>6amd{WSbIe1o?J{IgTKH&!JEgI z%U0YW(iu%T%+MQ!ZgD zX5rZr-EM7O&S*u^Z#mi`dbqWG)j2~RhNUWY*-zdRHsbTLMKTc$v0)TPvVQ$@wYong#ywMYFJBcj_h%WE&R8$f$B$`#?QU}YME;tJ2m>0r&b zcjyvn(ppomb)4=$m8lIjK$egexE87Pspm6=(Y8#oaVD_Gv&2>YN}>oPr7hmQ9kR`f zDaMk+*EWp5UAQG8*rC^0GvRNZIY2m~Ep|e*JTobvdpfy3*F#TDP+Cl|ZC$T9Z7gg< zWq179o>|}As%v_rp7+o}9!&H*4Rr|a=u<(y`Mk=Em?i?9)4j!OuLW5Bbyj093(}y6 z(bi(lFh2EkSBJEynoY+3ebajm=ivb?etG!7Slgoup1Et+c)T9YXxt|>*B8soGyLs? z8+zX-ltSk%jOfVKAtZsO_PLXACZi6r9+ETb6VOSx0wD6 z(AXdxbrZz_zmpux;Zo+cjvIT_SUhTiZ^z%{G~-f%tyjK9v>d^`WP~6D9j+R`>Z-9) z1XX(ClO@VOQ6(dJsmCqSXv4}c7>)sl$zm&S&XE;swm&yAQ8y>EsYQ=|vMqw(Fp%2n zJwtd%)DqWOaPgRnvdG3@EbUIOR=X`IqI`4KeTq-+bfXJaqPs5I$3@vBwB;&61GZ?b z&Ami?krID#kW3$%QbjtZ3gOKPClLdr4)5Vn6h9!ntKGVl%hdNMX(}4NlEzkuaTViV zV&Ia_QTZNS_#x5MlOELo5xeN4Ho4MAp+A;VHI#&T(ygEU>{BrJBLNR%G>QMG(IvMm zf`s8t>bwZ8m=92LW-~GR5|`yj_f@H7sz@`@Ti5?DloB zjzhBy_wBHcNM8b(#z;@K>%!~uqd-AlxbhV$O@y6sedO}}TRhg%UHCUw%G{jl`J3R; zyVal@RZWkN0-^|Rcqlv!!nTHH$Qey6PUC+5Pr}%U7V9KfiD&pW->$>t^S&TCmc6`8 z=(muK@wqbZAq)V3fjNRPSh*uqDa^D(Q?j8|u6H%P^JiaFbu-%Y1C3tWS=$o!=W0Jo?yi(_X0{)G#Q=OLBcZftBt#z%HEFf<`!_iqzk95snsC{gg+GdHAn!Y789;x zTUv25N^ckZ-W~>8KS=0B?&}Mk^3a`fU0qlzj@n&nq5ljd-7iOphvLf6 zY8{Ao*O@AcMBHN~2C)>J@|;VtI}a^$E6@4bb${acykS1&g-yPA35vRjQLfnO;mxy- z(tC6kuMp;;C1W>>dE$p1%s$4HPmXpqEafE7kX)K*YqLKUo!m$&YezhHthzX9zp9%E zfwg5>CSXRDa}+T2jVe`LQY(V~5ebVqRGd~Q2m|*CH8}xYWv2GrK+?Id>k-}%MaI!l zi&ZQSu0YBn-skQ7OyFVe*2z(EXon?P)zJEc8#t?2dF~VvSOlG)6=ZYr(%!D3m}=;N z6h%c@cYq>n&ANGF>1gz!QIZ$8+2XV9Q8pFcMp9;7O|nRQrIcuRttK$V9RE7!dZXMs z1Bu_Cgs>g)DC-x6Y8xarx;^6a1w|aNOCn;1bv2?7Uh{_vYZ)KyH${t3{F_@UGJ`BK zgp4YF*U##v(s7AwP1(7sifJ2qKNV7kd&vO>tN})=7t9$wE>5&h-b!wF9gK(%UX33O z^!FIRwJ2bC6W;m+9J+d6rl}(AwvQ>@Jy`Yl+N4tMYlSUJRHsush2JENHCWPocHf(C zQ2hdAUcz+1ZBP~Q8}?UjQOak?%eOwIuzTb;KDp}XEV&$=S)ETvSTtr`l$OrHz+DFa3&_M!&T~QKC9^6_>u1n=x zgE~(OOU*-wAHp57VSt#ucoL&8KHQBBFAd;fk*<7fW`X!xb*H6Ax+iN$b*vN{{D?sw zwBW%a%PITF`<*^ydTZ+`FU}(lHh2wR1kW-8i_Ejb4LWK8x=y>oR7&?hC&Q9n#HHRs zE*vtSxHHg(us_X3kRM1IojmWcEVU^o_w=~?fG#n2OC1%(yj7q4xELdjv!}}5&R9TB zhs?S|F0Au=?{^~xS^2M75ZydL$v9J!bfhrGJ(R1J zgya)(u76pN*|B}M24WlU`yl$I5ZISnieMva1rq9%JMudKm9dQD513H zyDrWL943n&qgJ-lGBni;)#AF8o-WU`KfU`9xs>wBlUeZg)z8MT`E0kJr~ovNJBm4* z=Whtdp6i7-`I*9sDEn!sad)g3i-nmSz}|x=(Y~PJL|UO$DMTn%)u#lm=QrM)j9+X? zs5{Y{&|9&e{SLk2g!V$ttgv1uqKZBc=#Lfg2AP>q+?;k|a|$pMD<3a}Wl|*17yCDsk&WqT_mI-riradJTmI65T7*p%wz&cZEb_rnkqmMMHH?_EzGQUyFs8l z4E8>vEjOxz6Nou8sh_!U5^)~i3{64@q$h;m3a2#Ec4v#R;7c9e5c?VO@(RqB-HXss zOncUz9H*>kf58)&1@%!7&hyT+r}c=pPxZ*^dhPa=FN+BHsO63R)WYq1SZwBBKV%2$AD;PYTRuq$jDMB@9I@3*fhvnee#=JnA`X5do4S*^Z4K^@oqN3C?%ckPaFtArqK=g)c{OISGrx5_%4 ztgwYAtKvrOIrK@E>*}9i8l+!j&j?v-(w+Or0nxY4lX2X2XmdgS*a63@=xr7TnRwDx zbDyS_4Nt25bBbx5R-5ZfQ&_XTZWtcH8+fde{gQq;{qq-pzY`)B1;Zln`2=Nz=AEhNq&ecjw4L)Xy?onNz`e%t=pi6_wlx4jmg zxz?Oj03P??ac4iQX1d^iaY7^0lI0{FEqkeksjJx2nbo3>9{>!^eC70NM4~DmmQ&C()hW%G$u)KIr(W{4n7cOpO$~FciPW#b)eUBOKSY&$R&-}Ef>?@Dx=T#?DeF5wG~HO zrj+R6d3AXuwMg3D+kP9|8qc3;?C4Pf*(6A#=FeA+i#EjEx4nT=_eXBR8gi|zv@5j^VI&RhM3ft%$!o6`D@jwT4f#ajxR)5)k^ z6VfCqG$$?I^0~Xr;ltC6oGZ)oZ|?In@hqV;1vjz&`V96|3zULCw_znVQ;iJ+bw)FM z()=--GX)o^R%>yba!n0_A4>m6G4Qi*@-+^%m=+Y-0enydx}{B(DZ1zRSKHFl34j0b4Ku z@LKoQ;z|3aozjSBrAz;>7)1Z=;dFTB)0C-nXwlpTqrfE*a^YM+P5=akIa zqc4YBwY?CEiZQlzuf&P2OVMTI0KTqkeB${vY>YSnZpi(0`>B7RgK3KJ)Oww?IlS&h z7^6u!Abhv!Kwo8DK}Qm?n3V);Oe8YEiU=?s@c&9rWx<;k%P#LU;WwL z3x0>a?#C33-yI_n?bb4XGVLPvga}OnBCJuZ`$>*9__FR}IA<$gbZq=@!yUb)2ghM) z28YV{`1owIhPF)1l#WDH6q5(AhPtnmHnuB%9>dyLm{~6w z4k2B#dFo&0M71nMHj7}8@H8y?J&xw+Bqwu%#tWnT?6$wF{ybXj=lL*KekCI-#2-SM z`=QbM9RVk(*&1WO3EeN8(F8r&UYCU)@BqB3+#C>feNdsQs0>_IhimqE(8S%lEz%uq zW*b(}vYI8|Qpnz=P$+wS}5fXag$@#?h7=}t(9+s^)jd*3HkTpvD*;n`I> zmlzPZNpopO40!mFf(7zq9^oTw*m77iS+);b>rYclSZnXKZSLi2S>^l{Avdg6FWdUd z>Mxvq9xEI@-nw2SBsWfa2c^{ttjV-=3e`Woa-zvAlQWY2#E4;D2^zC_! z{RMZbqJ=%Fn(=q1Ib`5#0iAux$S;;bjd?Lv>Z=(jM%njDKJHr4$(OUl zt_0Ea9ABKbuNi8G=7%uEy+F8Q%hX4j=9$)S6H2QN?ET1#<~C*K46dgHx0A5xTd z9L{IL65u7%4R>*4{g^(rZQU{Vg?dCdT4?S3L#hRgZQHl2^^szRo!rkNTZMz5mYR5L z-JUVTpt7(Cg^k3W(#Ge5HdgG_$Bz{L7< zVSp+f-p9u~C=;sWw}JS+Ur&-;r!^lL$IY(pwEJaZNV~Vazx_rCwO8@9Ig6oQSMSG} z_?%QT1_d{{II*YO!LpH&RI^=<=%EF0{mDSvnl41+dnCUucdvdffqk znn>m_on1<8-+a9Ef##f|pDP90}orC#1Gm~^JY^QM{ zR=#((72n;gIzJ*(sM@i@ffH=V<(S+9yd%-CsAp&6ztKW-I6weZv}%Tv_?#*`XCh}T zHBSIzzY%+zIwW#K(vlWDajz+bL7Tep+_)U$~qLc6<_mAqpr<{jW!s!87TZ z($|gOFL%D3pC=4NsP*obHMW%|>uOtRvyiXb$Hx@toX25e?$c0XI|<&sn_W!wcqb#X z{6Q>M0fLo$vrNB5w81V;lgD|rw8U{sIYsw#S!;V;8KSyXUpsg7CHFT)T&q@`%`zc9 ztjuLH1Y7#^s!iM26rK{D!AfmbXRDWaQUJ0et4_l_~11ctT^Z@Yrja0D(^HPb~%;__s*O*F?Vo0d;%VCgh zL*Z@AQG0*$FHI}?&7@1v7^!DJU>B$*&fm_9jbH!N$V$hIN#Q0iEEn~>3Evatecd78 z)?DV)1@2*k`)rdEYk+ zLow^x1NZWG^VwM?1YFj(amvTZmK3I`5qpqM$v$<_llL%a2! zjI+h$CqL3Y6E^$Y-(@~qc{FiR?KmXM(o~xIAO%*N{q|$h`pjBO91_I!n|z|33{E2V zpU@ulA84;ezDEqM@7V_Vb&*c#7Sxfqu|%-4tv-uZ6k-3x@LA$ykUCVD4bZZ|!r8x_ z4%j2j%V_z_H40I%uo-B|8}eA*ZldHu>sxYiXe5_?xC?zUwvW%wB*QtX$v2Dimo1+! zq8dMjO;C!ebPMwPEOG9jM~2g9^$ z3$woCboE-PY_Q*o{-x^fF8s`78!q8TTGef`(O<%65u0F<7%$2;|i73 zm?^ulx~5oB0y+OuHnVnva&`deB>&n%x7Ng0t)VQXj7gf#vtVli13uKU<@j1*&B@1hE@DYJmIhR^I!^oVqW7@cA zFvb?)?9swr_%0fsCl^EAi>9_P0wxNs0{JsS%OA7dT}|PD7fWTobFx)!r0i2e!v?q5 z#$tzM@;dvReCXTnKX2MPx3In6?Z5^n-Mr1Dud%QfD-zGnWV*mj3LFQpHZ7|Eb%9+~ zcQnt3rbd$6`lex(TspdzW)*qx1KKeufhT_!kL4RCFTxd{KefonU%I7EO_~D-g-Y2rRyU$|a@7jb3J8C36;P_jYgPv2G-h;yL-d)A5L?YSqi8@Wa%j`n$Lbr| zUGhG?$pF$JKEBE-QR6)GN|snI-H>p!k1E{vE*Z^RUp80c-&rk6(|qVvBW$oA9A z*-aM_TD@*3X$BQe0`1N=W2s=!?wiI<<3TN^W*~@F#0VYvYsR6zyrGKgEOcMFWd=8i zOpj7~1LgSE#(x24ODtgEjCHmx1n#ou`1$*64?tnDzEp$WRpPeXvM&)BN%0y|aP~hC zp%%)gSMV)uCZ=ubH2)fBVas%h>pO*5vh(qz zTr^A+Il(eVL3P1&U2m8b^ryj@-LKpq@39u@BlvV5 zdu_y`ryrVq%~_D3e}iKK1Y{ow19>-4K!r(%a}hYgfkPUwW(>M5^!>6Yu@+cdQmmyl zj5&{qoh^@n`Rz)3eC<`%g_)_Xk?i1%b^DR*HL~D8vj8nSI~CAEZ09h+q5xin#` zK_#>N6-VUq!0eVSBVKYB0!}oeP$!cO7MVkiFES=OXlRP~k(^Yb>u*yi&ViKJOl3j|DiOmYIxe{gU8;J4J=Tj zy-;4MbEbXnTL`TjPz-MOxFj`*{mvzBIGv_8`PWf}_t>O(xbqqco4&u>>Ob+ikL_Cn zGGRP`7=Y!RC!5q z)N8g-*az*`rdZj@5WHnbQG+WEBe}FAOWQBBzL;xXJt`8W+ND}!Ewu`9ID6zJz{A3W zR{t~fp!nE{%xbhCNkuA#Mt{Z1=?YxtfK=T=&rwGXxxn_Fq#`etK@v)ElXLqpXySF~ zJ}+(JVq)o(^ox&WUSS9gq}xj6^Y01?1=NRlB7*_y%QMy;ltU^9HC`j-^r1O_4xnP5 zPwWi2(&9$YC%N$n$Cuhc^pVM-K;dVB5hC9#Tq9xAb2L*!0Ao^domOI~`Qy@uDkabf z?so9+BjC(!US|5*j@NNkTx&lPd+Ym4@{Xvrk0UrF^_`ktYY7N}e-$e(5 zOA<&1ihh$%@-NJH);<47(h&RQSPMIp^W;n^m2f5)e8{hYQaH4p+x;G$*V z{f=|m@44$ir9iV*R|WZJvBH z$Q~4DgR%To}pbz9>`^}+4M{Nd11;qB?uD>WYXv}yEGH3Fg2DWLt<1uL@5?|tf6ej8mK9Yc)0&xUuPZF=GLwI z7AVCvK!G5|DOOwyg#y7T?oiwc1b1kQ6b(*sch}<3VgZU5YmpF~P@uR5Zo1F@_TBfM zGfw`=7%O9ByzhF~nk#cY^Y9XccqxQ?w2oP^lS1sa>szh86FKn+pdD;=E6(AJo7-ci_`PkXn~CgBUQUZDavcr z9S>?8ZF$ZRe8HgG`a)MY^%mj2;GxLb$w-(TfQam$NB01&1PjmwW^&W$`4%D0-*$mO z9q60Zx@Wg%Z+n}8$m8zbO9n}}Lh9tkRvIhrl(vfp2ci9VA*|T$@M-7_TfLAW@5f1S zC^$=#ayj4X;AGRTf+RawmMJ~VtF7RXbSRN5mc51pea2e&G^LdI#T(2Fi&!C-t%W;_ zAKIR}+If{l#*+`1)w>`{O}J|^HPI|jRmfd zUJ`W0ba1$^5=*fVVH-db5G_b$lTf?a>uSh#`Z`vC(k=yUfSIvK8k(6uKuRQep^OFH z?ILo@7sEz|=MQ0YGG#>DrH4{wGDV$B0#uXoLY1{eiF?Befy`3#X1rhnCg2H=S|xY= zetmS7D)hTQ*-wL~<)SAf>|{rO@uGjC6zbysYQWB8!vfTT zXSzGQZMR(#_AAE*txmcPeCEM+qkJ$KERfWxLae~E(^52=&Ud&_Qdpjxf~Bd9TUo;P;+c`-fz95iJeCxf( z>s&ij2QP$Vg7-AQ0uTMn*Zne;xVE?A`Y-F zv99%@Nv|Gp#S#%+Y|8FS!~pdAsIK?2Kt@GJou3t0>M4E5o`b*;Q2)TNe&oJR4D~je z)Gj23zR@e1c9eMb^te{8Hv#DSYy638KwEL6vD8}Ggbec9X1e{WV9Fnr56&k|M`ip^ zsChtC7y5Dv7c@3NmRTXDTCd4zx3s-F$jH-xAN~brT{*S(2?)sgN!q^F6L6?HAl#AV zuaMgDJ0p)`wO8!FaUhw& z|Ek~TVPT_|wl-Z(Bl6Q`xn9n$aNqM^TroW9c)8#Je^5`QUmuRe{V~@mWFa&r7y@02 zu&g8D+Ku6+kuB$#qWiqlLO)o8*uAVl1lus^Ftk4>IYcb@rM(twbiK2m_GS49``(Qtv%Qh~bw`DJfxOUxnAdK}PzW@Uz&Z2# z4=sm9ivdC8BzK7TzoGNjc7Gxcu2W(ETW0b)vjbB#3 zpLq(VJ2P><1N_lJl#pAdg14&$TPp}%P2W#W2Db@q0nI!GAGJBDiOy$MZT%u9f1YTq zZ8U50P~WMEi097}hWmu-(cZ`04$FDU`=RgVd8V;X zy5;-_Tv_gnyX=df<7V8junLwLZp~!l>ORc65jW$bJqmGGI~BF%m}Z*0H?Iky+hQnc zt8w78_T3*u6ctwxkF+gn)f-uLxhQbXhMU1~!33lRlq)GNba-yKqy~p{sV^TDK4aP& zsW!V^S6U4Jwtq2y5WpPc%JW*f)gSXea!;_+QugZv_#eKB`4dXP>YWeNzyj^B(}XzA zUonSYjk&^8H%&4&OREI;64_mckUo>8wOwt9vg+mf9_L+J0Nw6Ut#AamzS_dKQN6is zN}4xq|LgnUrC98Ho;p8_EqC~;vPl^O@nZz_d=E$0yunvSAg&#M2VQEH)QW4jS9Y+k zk=m3|3aRIuX~uJ@*lJEm-ESH_zQG*)H-ksX*9#y31T#yJ&`dTAhL77pP430oYF*U4 zpTI6Y^u6OI5$5R8%Uk8P+HB(UWVt7zU%1t{FU&HnYdxnynsAsK?%7YN_wmKK1v)&< zeMd(0$T@*+)N%B?g#6-^Wb5}vm9#F{RZ2qKTA$8)K?dH#4Sj@Z9@;Sq@%+1mpLe$K z_0fOLPx7Dn(F@SPg31^i`N6*M332Hy^NCLOUieIIULWkHDZ$C^E+S|TZuR4W(Q)K; zDKDwA?P@ABhWi}H0u&{s-6zbdxg+iB5nR~Cs7snykQw z8xW$Cn*nC}YR`9nBY%Aq%E)S~I-1vIvF$z;-Z#@9Vd+!IZ18JJMivM9+b?i@hAmi< zTo2+){O|^WnN@;1sue}dah+-a9of^Krt+e+nCa%7p zUdGjCT;Hb@5dIWwxlRmFzQESzyu?Kvrje|#PkS|JgzaC!?6>1=wi-Z;;DxXwW{&6^ z*2hO1|GkmDQA<}!!I)@rVNvdBig@yQ`Mm4Q`F+}o4OPh2kMy44gV!CMg)+{1?QV^d zjTRnCu>i>bFHd#9NtV1B88nAoi?9PwsT}kzl7I3|g&1qqM`Kx9mePt7p0P_qgc#c| znH{@(#DP-!QoeCl@y*+tILL8oiOitLW)7@}%B+*j6dW z4XbWlTphb--Qt?Wou7WO!f0t0yL6&XKr zk$kSWBZ3ez2~n3x1SGcFQ-w z414O%YKVO}ukFaZ41B@v>+)*Glytqr{+@r}66y9qyJ0jt@Wf25lD5RoAGwqZ+SI>Y zs`PN2lO;P!{V=1vJ-`R=-6{#k0p_mv6#-SGuph7m``w`~89^-y;F#CN2q_^!n8 zzJLOfk&NF#^(oVaD@UhzIft3}g6{h=#dyo}ZY$((Ea=6y?Ik;^@yRBXRw3pGU}^4^ zg_g^>oKmXY|NMh?eRs$R`Ewr1GS~1`!Z6l^Cg}I;-W+^>^o-aTh9s8I!lou$BzL0_ zNbb;hrcaOMC>yM#=e+;D3w=cSts}l+8|zcAy-@D%Y9rKsOHlldbeNRh3%T z{xHUp({jzi;RsJ`3Vv-ph;vSx1iX3WXVr_q?BZryGx+ou9&V{6ni~WeQhy4{WbDgR zI*;d#+j^5l{0>zf{B*AJi*HX?`!rkb1;G&0W0tIfBL(?%}2xIi_b|K|Xh8BQmOQ@2!mc{NBeEDZRKR`Q5T~IJZ zx4AAy?6(8%cM_-MdQ#Plj^#cGOJm@CCuYFVyG1Z4zTjT5uROd<65=VsVT!5h_P z{7xaYv%E3S2hxwXNFit2oj!MbhsJl|~-XOm^ux{*&Dp z38$fYM#BTiRB$5E=32I{8*JR{tL=w3wul+Lf^wYQP`p~&f_s1d+qL$;paK2mt4k{H zPyufggJ{`ogP5apFq1!bZ?wSyO_Lmq@%}B^-M-_h8A`hv{yO{o<{ipe;bI$g%f*jN zdF4pXur7c{Y0swiYrNo|+dVABvbr+{dc${l=c2*f?v zP4-*uqeXC(Hs-3J3K-OU69sz~zdSuMhg@TYlGmFxz3> zRKUR4zP#TjUCfR3yAUc`H?7}`9J`n?f5BLVjSlX>g6rE%qGzw^_T-rH7_Y4TbPBAT zDGfW$iLC{gdLFw!WAr?Z@hKgoEWg5X#RZWHWfn@~Ku3~t_DuN%etgRe;}Bm8kkxK} zu4^L%O{E$o{g=`&ggB`L8Yd$W*!R ztX|&xwI&3~B5lX1d%=Hk1ngraZEX!4!cT!t z?S~9HbV_7E~>rQzI&l+MIaVTcel#a96(;TwA|^7O+2H?@F?$g*Wb-pUuc5s0DUX zQ7ATSG%HUKvNSLF@Z|URC2c`1U>cYTMo4tu6G(D#;_8Qtt%W9vW-qG8;;w&o(+?B) z!C@q;BmsdK1@f?OW}D-$v6G^@Mr(q22_&}}Xe;~t>Ow91361QPGLqH_6tc!OuN)5P zbdei$hr6Fa>~ZnKz07m%)wNjpw*or+9~bHsG4Q$JcGEWe0uk(%idMB?hqr|GiSi&z z>qJuUQ}!6LH8KcG^)xo9CV*JxXAF$QTCLPeqHmeqowTUNwimyY(>JV8jtj&Jq}1Jf zL9?gYBG!QK2kp_^UmOtM0vgBWSl7eG`_XihdHRkCK(HDfCJck zc(DBA%E;=*p^^7TrwjRt;I9_WlTE^H{l?);f@`uStxm4e(+eu{?4Wo1EUGLpS?+fixttO8i&-X76)4FpLez1F8v zoTExX49TJwF@Piko5|{e14GAQb%OubRHTT@tf>R0oI3vaJd9U@IcNmxJx@z9jOTve4p zG;}ub73w3{ZIrav8fp;fWn=)-JqX-y$?-3W<*TW8@fdlT6nvrN;2$pNO$uvvzM%Vg&4JJ(8rS4@0>~zxz#olNF+IPZo~)1Uq1xDD zPfxV==T@(fIWBD`6bWU~?-~t{U~B=;0B`N-bT`*ll7)A7V}dKZYwf99s|%|7I5y74 zO7}47w4(}xB@3eMJ4J0Yt^3A!)27N2PulE&9Npq%Ckl{K+nY#pIaKrwmMrIE)=kTl z=`RAX#H=+KM1YfJJ${tXJyw14SzS|1G^cJvfA{FP14x*sw+?>Q>rJVo zxa|~_3V2OZw)=Ucyh#9WIEl)H77E?l9DiSjMh3H*E=^Bx?Nm)K@wHWEv;=v6d(!$d zoZFft%C)ku*4@2?fkIwH)1Dq3e(7*w4>|`i^ci2T@GsmYW@e^eKSP>!i`~y={e&M# z6Q=iFUwgC}U;deo_jG#{y7y=Ia{g5=rqFv^fe;u_s?T%Hy>~nu4asO-6Cns+ zR>h(M;s9pI0i3k!Lo>t!jU#z999r3P=2eePb-wu&WS9GR)Wuj<>Si%GM3Xh^;^&8g z(!6+|JVvBek5ro6~2aFGSt%fMe1+IntzQz*p3@TZD%=mTtcdN)qGuX)? zYDDUt^_~{j5`}&kqr=m|DU)C1=YaK5=9HQFC=*~~u+LjQwz8ZCAGsHJ9cCA0p~V!~ z_w{ZP5%s`0OdhCv1i%{7dV5nuF|73?&4<5XTGQ8&%>ELMk(G4iXeYA>%wa&s_O ze~%^hYqO%j7y1@LGf$|F~MRwzlWkZp@(F^2Ky+4kLV-Ay=NRLTCp z>Z~I-kNTFnzg>Ml&&@vF{%g9lC~F<2|xGV&~MZZ;~dDO>r) zLjz}H31y5e_KjhTo-h`84##4~k=uRx(QzZHUCZ2!_2W#e{l*7I@k#=x*oy3-3VAon z1IxtfE0UTv z<-r3q%|HJUpz&iCI(RV9|1hf)QHof`{hobAvRyA~6clKl6*cFGtG<*Y^bA`*QG#Xr zuuZdLA~(iWfY~xfXKag~0$)X>ce=U0!s%pMHeh(jRn&~RDNUA?uW{NYwUwZ7bHjA| zDtVpp;~0mrNWz)$dmvSt$B3ddjNK#?O}(u3J4N-d@7#OZ-!^^&K|1Is zZ6J}7w~1Ph9&~iA>~9`d=y^4d-LNpXhf3y?2OVZ#J#`0A*ivI2G59uj*d2))rgKtv z)31u5;*x&s10sm-E73Goho0u;dC|+5&5F>F-6wTp@_Bk_kbMl~64Y4_cHXe2)|V2I z$-owjLRSL*Y3$W@!Fu$U zUz5~7#8uSlaYagW(SviBoo(;TOeN~SsCKUvWu!6*fxoZf3B7y?i}x0~rugk-fo}51 z7y|<{1a(~@(liSg7!MwzCgj1Nw=bC3oiBQ)#>dAouh2g|{AU~`B~hZi6#1#5_Ym~& h(I>`e=){nF^p*7Z=69a9*AGxHML9Lu8ksjA{tvlOm|6e; literal 0 HcmV?d00001 diff --git a/TEMA9/report.md b/TEMA9/report.md index 065580b..f7e4191 100644 --- a/TEMA9/report.md +++ b/TEMA9/report.md @@ -2,6 +2,297 @@ Коломейцев Дмитрий, А-02-23 -## Тема 9. Создание пользовательских классов и объектов +## Создание пользовательских классов и объектов -## 1. \ No newline at end of file +### 1. Установка рабочего каталога. Создание рабочего протокола. + +В оболочке IDLE установил актуальный рабочий каталог, а затем в нём создал рабочий протокол. + +![alt text](pictures/image1.png) + +### 2. Создание классов и их наследников. + +Класс в Python, как и в других языках программирования, - это элемент ПО, описывающий абстрактный тип данных и его частичную или полную реализацию. Классы – это основные инструменты объектно-ориентированного программирования (ООП) в языке Python. Они представляют собой шаблоны, образцы, по которым может быть создано множество объектов-экземпляров класса. У каждого класса есть уникальное имя и некоторый набор специфических для него атрибутов: полей и методов, которые могут использоваться при работе с экземплярами класса. + +#### 2.1. Создание автономного класса. + +Классы могут быть автономными, т.е. независящими от других классов: + +```py +>>> class Class1: # Объявление класса +... def zad_zn(self, znach): # Метод класса для задания значения поля data +... self.data = znach +... def otobrazh(self): # Метод класса для отображения значения поля data +... print(self.data) +... +>>> z1 = Class1() # Создание 1-го экземпляра класса +>>> z2 = Class1() # Создание 2-го экземпляра класса +>>> z1.zad_zn("Экземпляр класса 1") +>>> z2.zad_zn(-632.453) +>>> z1.otobrazh() + Экземпляр класса 1 +>>> z2.otobrazh() + -632.453 +>>> z1.data = "Новое значение атрибута у экземпляра 1" +>>> z1.otobrazh() + Новое значение атрибута у экземпляра 1 +``` + +#### 2.2. Создание класса-наследника. + +Также классы могут наследоваться от других классов, т.е. иметь такие же поля данных как и класс-родитель и имплементировать его методы, которые можно переопределять. + +```py +>>> class Class2(Class1): # Объявление класса-наследника другого класса +... def otobrazh(self): # Переопределение метода класса-родителя +... print("Значение =", self.data) +... +>>> z3 = Class2() +>>> dir(z3) + ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_zn'] +>>> z3.zad_zn("Совсем новое") +>>> z3.otobrazh() # Сработал переопределенный метод otobrazh класса Class2 + Значение = Совсем новое +>>> z1.otobrazh() # Значение поля data класса Class1 не изменилось + Новое значение атрибута у экземпляра 1 +>>> del z1, z2, z3 +``` + +### 3. Использование классов, содержащихся в модулях. + +Классы могут быть описаны в модулях, которые потом должны быть подключены к основной программе, чтобы реализовать объекты соответствующего класса. Так, например, в модуле __"Mod3.py"__ описано обявление класса Class1: + +```py +class Class1: + def zad_zn(self, znach): + self.data = znach + def otobrazh(self): + print(self.data) + +class Class2(Class1): + def otobrazh(self): + print("Значение =", self.data) + +def otobrazh(obj): + print("Значение объекта =", obj) +``` + +Пример частичного импорта модуля и последующего создания объекта класса Class1: + +```py +>>> from Mod3 import Class1 +>>> z4 = Class1() +>>> z4.otobrazh() # Поле data класса не было инициализировано, поэтому его еще нет в классе + Traceback (most recent call last): + File "", line 1, in + z4.otobrazh() + File "/home/s0ba4/mpei/python-labs/TEMA9/Mod3.py", line 5, in otobrazh + print(self.data) + AttributeError: 'Class1' object has no attribute 'data' +>>> z4.data = "Значение поля data у экземпляра 4" # Прямая инициализация поля data +>>> z4.otobrazh() # Использован метод для отображения значения поля, описанный в Class1 + Значение поля data у экземпляра 4 +``` + +```py +>>> del z4 +>>> import Mod3 +>>> z4 = Mod3.Class2() +>>> z4.zad_zn("Класс из модуля") +>>> z4.otobrazh() # Использован метод для отображения значения поля, описанный в Class2 + Значение = Класс из модуля +>>> Mod3.otobrazh("Объект") # Использована функция otobrazh + Значение объекта = Объект +``` + +### 4. Использование специальных методов. + +Имена специальных методов предваряются одним или двумя подчерками и имеют вид: + __<имя специального метода>__. +Пример класса, содержащего два специальных метода: + +```py +>>> class Class3(Class2): +... def __init__(self, znach): # Специальный метод-конструктор +... self.data = znach +... def __add__(self, another_zn): # Специальный метод для сложения +... return Class3(self.data + another_zn) +... def zad_another_zn(self, povtor): # Обычный пользовательский метод +... self.data *= povtor +... +>>> z5 = Class3("abc") +>>> z5.otobrazh() + Значение = abc +>>> z6 = z5 + "def" +>>> z6.otobrazh() + Значение = abcdef +>>> z6.zad_another_zn(3) +>>> z6.otobrazh() + Значение = abcdefabcdefabcdef +``` + +### 5. Присоединение атрибутов к классу. + +Каждый класс обладает определенными атрибутами, список которых можно получить с помощью ранее изученной команды __dir()__. + +```py +>>> dir(Class3) + ['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_another_zn', 'zad_zn'] +>>> Class3.fio = "Иванов И.И." +>>> z7 = Class3(123) +>>> dir(z7) # Отображение списка атрибутов объекта класса после добавления в него поля fio + ['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'data', 'fio', 'otobrazh', 'zad_another_zn', 'zad_zn'] +>>> dir(z7) == dir(Class3) + False +>>> z7.fio + 'Иванов И.И.' +>>> Class3.fio + 'Иванов И.И.' +>>> z7.rozden = "1987" +>>> "rozden" in dir(z7) # Проверка того, что поле rozden появилось в объекте класса + True +>>> "rozden" in dir(Class3) # Проверка того, что поле rozden не появилось в самом классе + False +``` + +### 6. Выявление родительских классов. + +Чтобы узнать наследуется ли класс от какого-либо другого класса можно рассмотреть атрибут __bases__, который отображает соответствующий родительский класс: + +```py +>>> Class3.__bases__ + (,) +>>> Class2.__bases__ + (,) +>>> Class1.__bases__ + (,) +``` + +Для получения полной цепочки наследований нужно использовать атрибут __mro__: + +```py +>>> Class3.__mro__ + (, , , ) +>>> ZeroDivisionError.__mro__ + (, , , , ) +``` + +### 7. Создание свойств класса. + +Свойство (property) класса – это особый атрибут класса, с которым можно производить операции чтения или задания его значения, а также удаление значения этого атрибута. +Пример класса с определенным в нём свойством: + +```py +>>> class Class4: +... def __init__ (self, znach): +... self.__prm = znach +... def chten(self): +... return self.__prm +... def zapis(self, znch): +... self.__prm = znch +... def stiran(self): +... del self.__prm +... svojstvo = property(chten, zapis, stiran) +... +>>> example = Class4(12) +>>> example.svojstvo + 12 +>>> example.svojstvo = 45 +>>> print(example.svojstvo) + 45 +>>> del example.svojstvo +>>> example.svojstvo # Отображения отсутсвующего в объекте класса свойства вызывает ошибку + Traceback (most recent call last): + File "", line 1, in + example.svojstvo + File "", line 5, in chten + return self.__prm + AttributeError: 'Class4' object has no attribute '_Class4__prm' +``` + +### 8. Представление некоторой модели в виде класса. + +Различные модели можно представлять в виде отдельных классов. Пример создания класса для модели, состоящей из последовательного соединения усилителя и двух инерционных звеньев, охваченных отрицательной обратной связью с усилителем, представлен ниже. + +Содержимое модуля __SAU.py__ с классом __SAU__: + +```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 otobrazh(self): + print("y =", self.ypr[1]) +``` + +Содержимое модуля-программы __main_SAU.py__ с тестированием класса: + +```py +from SAU import * +prm = [2.5, 4, 1.3, 0.8] # Параметры модели: K1, T1, T2, K2 +xx = [0] + [1] * 20 # Входной сигнал – «ступенька» +SAUe = SAU(prm) +yt = [] + +for xt in xx: + SAUe.zdn_zn(xt) + SAUe.model() + SAUe.otobrazh() + yt.append(SAUe.ypr[1]) + +import pylab +pylab.plot(yt) +pylab.title("График выходного сигнала") +pylab.xlabel("Время - t") +pylab.ylabel("Выходной сигнал - y(t)") +pylab.grid(True) +pylab.show() +``` + +Результат выполнения программы и построенный график: + +```py +>>> import main_SAU + 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 +``` + +![alt text](pictures/image2.png) + +### 9. Завершение работы со средой. + +Сохранил файлы отчета в своем рабочем каталоге и закончил сеанс работы с IDLE. diff --git a/TEMA9/task.md b/TEMA9/task.md index e7cc72e..5bd0f44 100644 --- a/TEMA9/task.md +++ b/TEMA9/task.md @@ -4,4 +4,139 @@ ## Задание -## Решение \ No newline at end of file +Создайте и запишите в модуль класс, содержащий следующие компоненты: +* конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим фамилии сотрудников, название отделов, названия должностей сотрудников и размеры их окладов, некоторые начальные значения; +* метод для обеспечения операции повышения оклада сотрудника на заданное значение; +* метод для обеспечения перевода сотрудника из одного отдела в другой; +* метод для изменения должности сотрудника; +* свойство, содержащее перечень (список) поощрений сотрудника. + +Создайте 2 экземпляра класса, задайте им некоторые значения атрибутов и свойства. Отобразите эти значения. Попробуйте с этими экземплярами операции перевода из отдела в отдел, изменения должности и оклада, объявления благодарности. + +## Решение + +Содержимое модуля __Employee.py__: + +```py +class Employee: + """Класс, описывающий основные данные о сотруднике организации""" + + def __init__(self, fio = "", otdel = "", dolzhnost = "", oklad = 0): + self.fio = fio + self.otdel = otdel + self.dolzhnost = dolzhnost + self.oklad = oklad + self.__pooshreniya = [] + self.pooshreniya = property( + self.get_pooshreniya, + self.set_pooshreniya, + self.del_pooshreniya + ) + + def change_oklad(self, diff): + if (self.oklad + diff <= 0): + print("Оклад сотрудника не может быть меньше либо равен 0") + else: + self.oklad += diff + print(f"Оклад сотрудника {self.fio} был {'увеличен' if diff >= 0 else 'уменьшен'} на {abs(diff)}") + + def change_otdel(self, new_otdel): + old_otdel = self.otdel + self.otdel = new_otdel + print(f"Сотрудник {self.fio} был переведен из отдела '{old_otdel}' в '{new_otdel}'") + + def change_dolzhnost(self, new_dolzhnost): + old_dolzhnost = self.dolzhnost + self.dolzhnost = new_dolzhnost + print(f"Должность сотрудника {self.fio} была изменена с '{old_dolzhnost}' на '{new_dolzhnost}'") + + def get_pooshreniya(self): + return list(self.__pooshreniya) + + def set_pooshreniya(self, value): + if isinstance(value, str): + self.__pooshreniya.append(value) + print(f"Добавлено поощрение для сотрудника {self.fio}: '{value}'") + elif isinstance(value, list): + self.__pooshreniya.extend(value) + print(f"Добавлены поощрения для сотрудника {self.fio}: {value}") + else: + print("Поощрение должно быть строкой или списком строк") + + def del_pooshreniya(self, item = ""): + if not item: + self.__pooshreniya.clear() + print(f"Список поощрений сотрудника {self.fio} очищен") + elif item in self.__pooshreniya: + self.__pooshreniya.remove(item) + print(f"Поощрение '{item}' сотрудника {self.fio} удалено") + else: + print(f"Такого поощрения нет в списке поощрений сотрудника {self.fio}") + + def get_employee_info(self): + print(f""" + ФИО: {self.fio} + Отдел: {self.otdel} + Должность: {self.dolzhnost} + Оклад: {self.oklad} руб. + Поощрения: {self.__pooshreniya if self.__pooshreniya else 'нет'} + """) +``` + +Проверка класса на работоспособность: + +```py +>>> from Employee import Employee +>>> employee1 = Employee("Иванов И.И.", "Отдел продаж недвижимости", "Руководитель отдела продаж", 75000) +>>> employee2 = Employee("Смирнов С.С.", "Отдел брокеров", "Брокер", 50000) +>>> employee1.get_employee_info() # Отображение полной информации об экземпляре класса + + ФИО: Иванов И.И. + Отдел: Отдел продаж недвижимости + Должность: Руководитель отдела продаж + Оклад: 75000 руб. + Поощрения: нет + +>>> employee2.get_employee_info() + + ФИО: Смирнов С.С. + Отдел: Отдел брокеров + Должность: Брокер + Оклад: 50000 руб. + Поощрения: нет + +>>> employee1.change_otdel("Администрация") # Изменение отдела + Сотрудник Иванов И.И. был переведен из отдела 'Отдел продаж недвижимости' в 'Администрация' +>>> employee2.change_oklad(-5000) # Изменение оклада (отрицательное число) + Оклад сотрудника Смирнов С.С. был уменьшен на 5000 +>>> employee2.change_oklad(7500) # Изменение оклада (положительное число) + Оклад сотрудника Смирнов С.С. был увеличен на 7500 +>>> employee2.change_dolzhnost("CEO") # Изменение должности +>>> Должность сотрудника Смирнов С.С. была изменена с 'Брокер' на 'CEO' +>>> employee1.set_pooshreniya("Благодарность клиента") # Добавление поощрения + Добавлено поощрение для сотрудника Иванов И.И.: 'Благодарность клиента' +>>> employee1.set_pooshreniya(["Премия за сделку", "Сертификат 'Лучший брокер'"]) # Добавление списка поощрений + Добавлены поощрения для сотрудника Иванов И.И.: ['Премия за сделку', "Сертификат 'Лучший брокер'"] +>>> employee1.get_pooshreniya() # Отображение списка поощрений + ['Благодарность клиента', 'Премия за сделку', "Сертификат 'Лучший брокер'"] +>>> employee1.del_pooshreniya("Премия за сделку") # Удаление определенного поощрения + Поощрение 'Премия за сделку' сотрудника Иванов И.И. удалено +>>> employee1.del_pooshreniya() # Удаление всех поощрений + Список поощрений сотрудника Иванов И.И. очищен +>>> employee1.get_employee_info() + + ФИО: Иванов И.И. + Отдел: Администрация + Должность: Руководитель отдела продаж + Оклад: 75000 руб. + Поощрения: нет + +>>> employee2.get_employee_info() + + ФИО: Смирнов С.С. + Отдел: Отдел брокеров + Должность: CEO + Оклад: 52500 руб. + Поощрения: нет + +``` \ No newline at end of file