EgorPC 3 недель назад
Родитель 509150281a
Сommit c850ee604c

@ -0,0 +1,594 @@
# Отчет по Теме 8
Грудинин Егор, А-03-23
## 1 Создание и использование модулей в среде Python
Создадим модуль Mod1:
```py
perm1=input('Mod1:Введите значение = ')
print('Mod1:значение perm1',perm1)
```
```py
>>> import Mod1
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
>>> dir(Mod1)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'perm1']
>>> type(Mod1)
<class 'module'>
>>> Mod1.perm1
'5'
>>> import Mod1
>>> import importlib
>>> importlib.reload(Mod1)
Mod1:Введите значение = 3
Mod1:Значение perm1= 3
<module 'Mod1' from 'D:\\!!!Download\\Documents\\учёба МЭИ\\5 СЕМЕСТР\\GIT\\python-labs\\TEMA8\\Mod1.py'>
>>> Mod1.perm1
'3'
>>> import sys
>>> print(sorted(sys.modules.keys()))
['Mod1', '\_\_future\_\_', '\_\_main\_\_', '\_abc', '\_ast', '\_bisect', '\_bz2', '\_codecs', '\_collections', '\_collections\_abc', '\_colorize', '\_compat\_pickle', '\_compression', '\_datetime', '\_distutils\_hack', '\_frozen\_importlib', '\_frozen\_importlib\_external', '\_functools', '\_heapq', '\_imp', '\_io', '\_lzma', '\_opcode', '\_opcode\_metadata', '\_operator', '\_pickle', '\_pyrepl', '\_pyrepl.pager', '\_queue', '\_random', '\_signal', '\_sitebuiltins', '\_socket', '\_sre', '\_stat', '\_string', '\_struct', '\_sysconfig', '\_thread', '\_tkinter', '\_tokenize', '\_typing', '\_warnings', '\_weakref', '\_weakrefset', '\_winapi', '\_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf\_8', 'encodings.utf\_8\_sig', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete\_w', 'idlelib.calltip', 'idlelib.calltip\_w', 'idlelib.config', 'idlelib.debugger', 'idlelib.debugger\_r', 'idlelib.debugobj', 'idlelib.debugobj\_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'importlib', 'importlib.\_abc', 'importlib.\_bootstrap', 'importlib.\_bootstrap\_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're.\_casefix', 're.\_compiler', 're.\_constants', 're.\_parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
>>> sys.modules.pop('Mod1')
<module 'Mod1' from 'D:\\!!!Download\\Documents\\учёба МЭИ\\5 СЕМЕСТР\\GIT\\python-labs\\TEMA8\\Mod1.py'>
>>> print(sorted(sys.modules.keys()))
\['\_\_future\_\_', '\_\_main\_\_', '\_abc', '\_ast', '\_bisect', '\_bz2', '\_codecs', '\_collections', '\_collections\_abc', '\_colorize', '\_compat\_pickle', '\_compression', '\_datetime', '\_distutils\_hack', '\_frozen\_importlib', '\_frozen\_importlib\_external', '\_functools', '\_heapq', '\_imp', '\_io', '\_lzma', '\_opcode', '\_opcode\_metadata', '\_operator', '\_pickle', '\_pyrepl', '\_pyrepl.pager', '\_queue', '\_random', '\_signal', '\_sitebuiltins', '\_socket', '\_sre', '\_stat', '\_string', '\_struct', '\_sysconfig', '\_thread', '\_tkinter', '\_tokenize', '\_typing', '\_warnings', '\_weakref', '\_weakrefset', '\_winapi', '\_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf\_8', 'encodings.utf\_8\_sig', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete\_w', 'idlelib.calltip', 'idlelib.calltip\_w', 'idlelib.config', 'idlelib.debugger', 'idlelib.debugger\_r', 'idlelib.debugobj', 'idlelib.debugobj\_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'importlib', 'importlib.\_abc', 'importlib.\_bootstrap', 'importlib.\_bootstrap\_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're.\_casefix', 're.\_compiler', 're.\_constants', 're.\_parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
>>> import Mod1
Mod1:Введите значение = 6
Mod1:Значение perm1= 6
>>> print(sorted(sys.modules.keys()))
\['Mod1', '\_\_future\_\_', '\_\_main\_\_', '\_abc', '\_ast', '\_bisect', '\_bz2', '\_codecs', '\_collections', '\_collections\_abc', '\_colorize', '\_compat\_pickle', '\_compression', '\_datetime', '\_distutils\_hack', '\_frozen\_importlib', '\_frozen\_importlib\_external', '\_functools', '\_heapq', '\_imp', '\_io', '\_lzma', '\_opcode', '\_opcode\_metadata', '\_operator', '\_pickle', '\_pyrepl', '\_pyrepl.pager', '\_queue', '\_random', '\_signal', '\_sitebuiltins', '\_socket', '\_sre', '\_stat', '\_string', '\_struct', '\_sysconfig', '\_thread', '\_tkinter', '\_tokenize', '\_typing', '\_warnings', '\_weakref', '\_weakrefset', '\_winapi', '\_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf\_8', 'encodings.utf\_8\_sig', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete\_w', 'idlelib.calltip', 'idlelib.calltip\_w', 'idlelib.config', 'idlelib.debugger', 'idlelib.debugger\_r', 'idlelib.debugobj', 'idlelib.debugobj\_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'importlib', 'importlib.\_abc', 'importlib.\_bootstrap', 'importlib.\_bootstrap\_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're.\_casefix', 're.\_compiler', 're.\_constants', 're.\_parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
>>> sys.modules.pop('Mod1')
<module 'Mod1' from 'D:\\\\!!!Download\\\\Documents\\\\учёба МЭИ\\\\5 СЕМЕСТР\\\\GIT\\\\python-labs\\\\TEMA8\\\\Mod1.py'>
>>> print(sorted(sys.modules.keys()))
\['\_\_future\_\_', '\_\_main\_\_', '\_abc', '\_ast', '\_bisect', '\_bz2', '\_codecs', '\_collections', '\_collections\_abc', '\_colorize', '\_compat\_pickle', '\_compression', '\_datetime', '\_distutils\_hack', '\_frozen\_importlib', '\_frozen\_importlib\_external', '\_functools', '\_heapq', '\_imp', '\_io', '\_lzma', '\_opcode', '\_opcode\_metadata', '\_operator', '\_pickle', '\_pyrepl', '\_pyrepl.pager', '\_queue', '\_random', '\_signal', '\_sitebuiltins', '\_socket', '\_sre', '\_stat', '\_string', '\_struct', '\_sysconfig', '\_thread', '\_tkinter', '\_tokenize', '\_typing', '\_warnings', '\_weakref', '\_weakrefset', '\_winapi', '\_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf\_8', 'encodings.utf\_8\_sig', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete\_w', 'idlelib.calltip', 'idlelib.calltip\_w', 'idlelib.config', 'idlelib.debugger', 'idlelib.debugger\_r', 'idlelib.debugobj', 'idlelib.debugobj\_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'importlib', 'importlib.\_abc', 'importlib.\_bootstrap', 'importlib.\_bootstrap\_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're.\_casefix', 're.\_compiler', 're.\_constants', 're.\_parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
>>> exec(open('Mod1.py').read())
Mod1:Введите значение = 2
Mod1:Значение perm1= 2
>>> Mod1.perm1
'6'
>>> exec(open('Mod1.py').read())
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
>>> exec(open('Mod1.py').read())
Mod1:Введите значение = 9
Mod1:Значение perm1= 9
>>> Mod1.perm1
'6'
>>> dir()
\['Mod1', '\_\_annotations\_\_', '\_\_builtins\_\_', '\_\_doc\_\_', '\_\_file\_\_', '\_\_loader\_\_', '\_\_name\_\_', '\_\_package\_\_', '\_\_spec\_\_', '\_\_warningregistry\_\_', 'importlib', 'perm1', 'sys']
>>> print(sorted(sys.modules.keys()))
\['\_\_future\_\_', '\_\_main\_\_', '\_abc', '\_ast', '\_bisect', '\_bz2', '\_codecs', '\_collections', '\_collections\_abc', '\_colorize', '\_compat\_pickle', '\_compression', '\_datetime', '\_distutils\_hack', '\_frozen\_importlib', '\_frozen\_importlib\_external', '\_functools', '\_heapq', '\_imp', '\_io', '\_lzma', '\_opcode', '\_opcode\_metadata', '\_operator', '\_pickle', '\_pyrepl', '\_pyrepl.pager', '\_queue', '\_random', '\_signal', '\_sitebuiltins', '\_socket', '\_sre', '\_stat', '\_string', '\_struct', '\_sysconfig', '\_thread', '\_tkinter', '\_tokenize', '\_typing', '\_warnings', '\_weakref', '\_weakrefset', '\_winapi', '\_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf\_8', 'encodings.utf\_8\_sig', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete\_w', 'idlelib.calltip', 'idlelib.calltip\_w', 'idlelib.config', 'idlelib.debugger', 'idlelib.debugger\_r', 'idlelib.debugobj', 'idlelib.debugobj\_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'importlib', 'importlib.\_abc', 'importlib.\_bootstrap', 'importlib.\_bootstrap\_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're.\_casefix', 're.\_compiler', 're.\_constants', 're.\_parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
>>> perm1 in sorted(sys.modules.keys())
False
>>> from Mod1 import perm1
Mod1:Введите значение = 2
Mod1:Значение perm1= 2
>>> dir()
\['Mod1', '\_\_annotations\_\_', '\_\_builtins\_\_', '\_\_doc\_\_', '\_\_file\_\_', '\_\_loader\_\_', '\_\_name\_\_', '\_\_package\_\_', '\_\_spec\_\_', '\_\_warningregistry\_\_', 'importlib', 'perm1', 'sys']
>>> Mod1.perm1
'6'
>>> print(sorted(sys.modules.keys()))
\['Mod1', '\_\_future\_\_', '\_\_main\_\_', '\_abc', '\_ast', '\_bisect', '\_bz2', '\_codecs', '\_collections', '\_collections\_abc', '\_colorize', '\_compat\_pickle', '\_compression', '\_datetime', '\_distutils\_hack', '\_frozen\_importlib', '\_frozen\_importlib\_external', '\_functools', '\_heapq', '\_imp', '\_io', '\_lzma', '\_opcode', '\_opcode\_metadata', '\_operator', '\_pickle', '\_pyrepl', '\_pyrepl.pager', '\_queue', '\_random', '\_signal', '\_sitebuiltins', '\_socket', '\_sre', '\_stat', '\_string', '\_struct', '\_sysconfig', '\_thread', '\_tkinter', '\_tokenize', '\_typing', '\_warnings', '\_weakref', '\_weakrefset', '\_winapi', '\_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf\_8', 'encodings.utf\_8\_sig', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete\_w', 'idlelib.calltip', 'idlelib.calltip\_w', 'idlelib.config', 'idlelib.debugger', 'idlelib.debugger\_r', 'idlelib.debugobj', 'idlelib.debugobj\_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'importlib', 'importlib.\_abc', 'importlib.\_bootstrap', 'importlib.\_bootstrap\_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're.\_casefix', 're.\_compiler', 're.\_constants', 're.\_parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
```
Когда модуль импортируется в Python, он кэшируется в памяти. Даже после удаления через pop, интерпретатор сохраняет созданные объекты и переменные. При повторном импорте создается новая копия модуля, но прежняя версия с её значениями продолжает существовать в памяти независимо.
Теперь создадим модуль Mod2:
```py
def alpha():
print('****ALPHA****')
t = input('Значение t=')
return t
def beta(q):
import math
expi = q * math.pi
return math.exp(expi)
```
```py
>>> from Mod2 import beta
>>> g=beta(2)
>>> g
535.4916555247646
>>> dir()
\['Mod1', '\_\_annotations\_\_', '\_\_builtins\_\_', '\_\_doc\_\_', '\_\_file\_\_', '\_\_loader\_\_', '\_\_name\_\_', '\_\_package\_\_', '\_\_spec\_\_', '\_\_warningregistry\_\_', 'beta', 'g', 'importlib', 'perm1', 'sys']
print(sorted(sys.modules.keys()))
\['Mod1', 'Mod2', '\_\_future\_\_', '\_\_main\_\_', '\_abc', '\_ast', '\_bisect', '\_bz2', '\_codecs', '\_collections', '\_collections\_abc', '\_colorize', '\_compat\_pickle', '\_compression', '\_datetime', '\_distutils\_hack', '\_frozen\_importlib', '\_frozen\_importlib\_external', '\_functools', '\_heapq', '\_imp', '\_io', '\_lzma', '\_opcode', '\_opcode\_metadata', '\_operator', '\_pickle', '\_pyrepl', '\_pyrepl.pager', '\_queue', '\_random', '\_signal', '\_sitebuiltins', '\_socket', '\_sre', '\_stat', '\_string', '\_struct', '\_sysconfig', '\_thread', '\_tkinter', '\_tokenize', '\_typing', '\_warnings', '\_weakref', '\_weakrefset', '\_winapi', '\_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf\_8', 'encodings.utf\_8\_sig', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete\_w', 'idlelib.calltip', 'idlelib.calltip\_w', 'idlelib.config', 'idlelib.debugger', 'idlelib.debugger\_r', 'idlelib.debugobj', 'idlelib.debugobj\_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'importlib', 'importlib.\_abc', 'importlib.\_bootstrap', 'importlib.\_bootstrap\_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're.\_casefix', 're.\_compiler', 're.\_constants', 're.\_parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
>>> alpha()
Traceback (most recent call last):
File "<pyshell#35>", line 1, in <module>
alpha()
NameError: name 'alpha' is not defined
>>> beta()
Traceback (most recent call last):
File "<pyshell#36>", line 1, in <module>
beta()
TypeError: beta() missing 1 required positional argument: 'q'
>>> from Mod2 import alpha as al
>>> al()
****ALPHA****
Значение t=2
'2'
>>> del al,beta
>>> from Mod2 import alpha as al, beta as bt
>>> del al,bt
>>> from Mod2 import \*
>>> tt=alpha()
****ALPHA****
Значение t=0.12
>>> uu=beta(float(tt))
>>> uu
1.4578913609506803
```
## 2 Создание многомодульных программ
```py
>>> print(sorted(sys.modules.keys()))
['Mod1', 'Mod2', '\_\_future\_\_', '\_\_main\_\_', '\_abc', '\_ast', '\_bisect', '\_bz2', '\_codecs', '\_collections', '\_collections\_abc', '\_colorize', '\_compat\_pickle', '\_compression', '\_datetime', '\_distutils\_hack', '\_frozen\_importlib', '\_frozen\_importlib\_external', '\_functools', '\_heapq', '\_imp', '\_io', '\_lzma', '\_opcode', '\_opcode\_metadata', '\_operator', '\_pickle', '\_pyrepl', '\_pyrepl.pager', '\_queue', '\_random', '\_signal', '\_sitebuiltins', '\_socket', '\_sre', '\_stat', '\_string', '\_struct', '\_sysconfig', '\_thread', '\_tkinter', '\_tokenize', '\_typing', '\_warnings', '\_weakref', '\_weakrefset', '\_winapi', '\_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf\_8', 'encodings.utf\_8\_sig', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete\_w', 'idlelib.calltip', 'idlelib.calltip\_w', 'idlelib.config', 'idlelib.debugger', 'idlelib.debugger\_r', 'idlelib.debugobj', 'idlelib.debugobj\_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'importlib', 'importlib.\_abc', 'importlib.\_bootstrap', 'importlib.\_bootstrap\_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're.\_casefix', 're.\_compiler', 're.\_constants', 're.\_parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
>>> sys.modules.pop('Mod1')
<module 'Mod1' from 'D:\\\\!!!Download\\\\Documents\\\\учёба МЭИ\\\\5 СЕМЕСТР\\\\GIT\\\\python-labs\\\\TEMA8\\\\Mod1.py'>
>>> sys.modules.pop('Mod2')
<module 'Mod2' from 'D:\\\\!!!Download\\\\Documents\\\\учёба МЭИ\\\\5 СЕМЕСТР\\\\GIT\\\\python-labs\\\\TEMA8\\\\Mod2.py'>
>>> print(sorted(sys.modules.keys()))
['\_\_future\_\_', '\_\_main\_\_', '\_abc', '\_ast', '\_bisect', '\_bz2', '\_codecs', '\_collections', '\_collections\_abc', '\_colorize', '\_compat\_pickle', '\_compression', '\_datetime', '\_distutils\_hack', '\_frozen\_importlib', '\_frozen\_importlib\_external', '\_functools', '\_heapq', '\_imp', '\_io', '\_lzma', '\_opcode', '\_opcode\_metadata', '\_operator', '\_pickle', '\_pyrepl', '\_pyrepl.pager', '\_queue', '\_random', '\_signal', '\_sitebuiltins', '\_socket', '\_sre', '\_stat', '\_string', '\_struct', '\_sysconfig', '\_thread', '\_tkinter', '\_tokenize', '\_typing', '\_warnings', '\_weakref', '\_weakrefset', '\_winapi', '\_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf\_8', 'encodings.utf\_8\_sig', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete\_w', 'idlelib.calltip', 'idlelib.calltip\_w', 'idlelib.config', 'idlelib.debugger', 'idlelib.debugger\_r', 'idlelib.debugobj', 'idlelib.debugobj\_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'importlib', 'importlib.\_abc', 'importlib.\_bootstrap', 'importlib.\_bootstrap\_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're.\_casefix', 're.\_compiler', 're.\_constants', 're.\_parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
```
Создадим модуль Mod0:
```py
import Mod1
print('perm1=', Mod1.perm1)
from Mod2 import alpha as a1
tt = a1()
print('tt=', tt)
from Mod2 import beta
qq = beta(float(tt))
print('qq=', qq)
```
```py
>>> import Mod0
Mod1:Введите значение = 1
Mod1:Значение perm1= 1
perm1= 1
\*\*\*\*ALPHA\*\*\*\*
Значение t=2
tt= 2
qq= 535.4916555247646
>>> Mod0.tt;Mod0.qq;Mod0.Mod1.perm1
'2'
535.4916555247646
'1'
```
Создадим модули MM0, MM1 и MM2 такие, что:
MM0:
```py
import MM2
print('y=', MM2.vyhod)
```
MM1:
```py
def realdvig(xtt, kk1, TT, yti1, ytin1):
# Модель реального двигателя
yp = kk1 * xtt # усилитель
yti1 = yp + yti1 # Интегратор
ytin1 = (yti1 + TT * ytin1) / (TT + 1)
return [yti1, ytin1]
def tahogen(xtt, kk2, yti2):
# Модель тахогенератора
yp = kk2 * xtt # усилитель
yti2 = yp + yti2 # интегратор
return yti2
def nechus(xtt, gran):
# зона нечувствит
ytt = None
if xtt > gran and xtt > (-gran):
ytt = 0
elif xtt >= gran:
ytt = xtt - gran
elif xtt <= (-gran):
ytt = xtt + gran
return ytt
```
MM2:
```py
znach = input('k1,T,k2,Xm,A,F,N=').split(',')
k1 = float(znach[0])
T = float(znach[1])
k2 = float(znach[2])
Xm = float(znach[3])
A = float(znach[4])
F = float(znach[5])
N = int(znach[6])
import math
vhod = []
for i in range(N):
vhod.append(A * math.sin((2 * i * math.pi) / F))
import MM1 as mod
yi1 = 0; yin1 = 0; yi2 = 0
vyhod = []
for xt in vhod:
xt1 = xt - yi2 # отрицательная обратная связь
[yi1, yin1] = mod.realdvig(xt1, k1, T, yi1, yin1)
yi2 = mod.tahogen(yin1, k2, yi2)
yt = mod.nechus(yin1, Xm)
vyhod.append(yt)
```
Запуск модуля MM0:
```py
k1,T,k2,Xm,A,F,N=100, 10, 200, 5, 1, 50, 100
y= \[0, 0, -2062.187673241671, 3752502.2801429303, -6811818291.756302, 12365297400107.988, -2.2446367934687616e+16, 4.074624468431861e+19, -7.396548344503773e+22, 1.342674100065877e+26, -2.4373175906128126e+29, 4.4243923653693636e+32, -8.031471925583947e+35, 1.4579299475411253e+39, -2.6465382082285303e+42, 4.8041845216406776e+45, -8.720897679168846e+48, 1.5830794172859812e+52, -2.873718433161771e+55, 5.216578235381038e+58, -9.469504100271485e+61, 1.7189717830141683e+65, -3.1203999275043293e+68, 5.664372041346515e+71, -1.0282371288365432e+75, 1.866529220539488e+78, -3.3882566904288307e+81, 6.150604701981334e+84, -1.116501542132187e+88, 2.026753065730243e+91, -3.6791064180730074e+94, 6.6785758286883414e+97, -1.212342618860748e+101, 2.2007306096497498e+104, -3.994922838562404e+107, 7.25186827324016e+110, -1.3164107437767657e+114, 2.3896424769952626e+117, -4.3378491058778625e+120, 7.874372441280753e+123, -1.4294121310025034e+127, 2.5947706379059605e+130, -4.710212343459617e+133, 8.550312692910703e+136, -1.552113616450096e+140, 2.8175071075087226e+143, -5.1145394362419765e+146, 9.284276009512575e+149, -1.6853478616277227e+153, 3.059363392237472e+156, -5.5535741782845336e+159, 1.008124312135154e+163, -1.8300190041432215e+166, 3.321980747029509e+169, -6.030295892364987e+172, 1.0946622307185519e+176, -1.9871087932498902e+179, 3.607141313004942e+182, -6.547939647887588e+185, 1.1886286095251596e+189, -2.1576832520707578e+192, 3.916780211210369e+195, -7.110018214307417e+198, 1.2906611114684283e+202, -2.3428999117116665e+205, 4.252998674495826e+208, -7.72034589904807e+211, 1.401452136780036e+215, -2.5440156663544065e+218, 4.618078306638927e+221, -8.38306443167872e+224, 1.5217535216899362e+228, -2.7623953026351666e+231, 5.0144965654797075e+234, -9.102671070002446e+237, 1.652381640443558e+241, -2.999520761189287e+244, 5.444943575135833e+247, -9.8840491187859e+250, 1.7942229452788257e+254, -3.257001193211853e+257, 5.912340381387176e+260, -1.0732501068232718e+264, 1.948239981957719e+267, -3.536583880278735e+270, 6.419858774112167e+273, -1.1653784577080823e+277, 2.1154779216742002e+280, -3.840166091530762e+283, 6.9709428112924446e+286, -1.2654151544507626e+290, 2.2970716536645406e+293, -4.1698079586848016e+296, 7.569332190649337e+299, -1.374039053598805e+303, 2.494253486651031e+306, -inf, None, None, None]
```
Попробуем в Mod2 в функцию alpha вставить обращение к функции beta и наоборот:
Обращение к beta внутри alpha:
```PY
def alpha():
print('****ALPHA****')
t = input('Значение t=')
beta(int(t))
return t
def beta(q):
import math
expi = q * math.pi
return math.exp(expi)
```
Обращение к alpha внутри beta:
```PY
def alpha():
print('****ALPHA****')
t = input('Значение t=')
return t
def beta(q):
import math
expi = q * math.pi
alpha()
return math.exp(expi)
```
```PY
>>> from Mod2 import alpha as al, beta as bt
>>> al()
\*\*\*\*ALPHA\*\*\*\*
Значение t=2
'2'
= RESTART: D:\\!!!Download\\Documents\\учёба МЭИ\\5 СЕМЕСТР\\GIT\\python-labs\\TEMA8\\Mod2.py
>>> from Mod2 import alpha as al, beta as bt
>>> bt(2)
\*\*\*\*ALPHA\*\*\*\*
Значение t=3
535.4916555247646
```
Обращение к функции beta внутри alpha происходит и выполняется, но возвращаемое значение beta не используется и не сохраняется. Аналогично, вызов alpha внутри beta выполняет ввод значения t, однако оператор return t из alpha игнорируется, так как возвращаемое значение не присваивается переменной.
Теперь попробуем отобразить на экране в модуле Mod0 значения объектов t и expi:
```py
# Модуль Mod0
import Mod1
print('perm1=', Mod1.perm1)
from Mod2 import alpha as a1
tt = a1()
print('tt=', tt)
from Mod2 import beta
qq = beta(float(tt))
print('qq=', qq)
print(beta.expi)
print(a1.t)
```
```py
= RESTART: D:\\!!!Download\\Documents\\учёба МЭИ\\5 СЕМЕСТР\\GIT\\python-labs\\TEMA8\\Mod0.py
Mod1:Введите значение = 2
Mod1:Значение perm1= 2
perm1= 2
\*\*\*\*ALPHA\*\*\*\*
Значение t=2
tt= 2
qq= 535.4916555247646
Traceback (most recent call last):
File "D:\\!!!Download\\Documents\\учёба МЭИ\\5 СЕМЕСТР\\GIT\\python-labs\\TEMA8\\Mod0.py", line 11, in <module>
print(al.t)
AttributeError: 'function' object has no attribute 't'
= RESTART: D:\\!!!Download\\Documents\\учёба МЭИ\\5 СЕМЕСТР\\GIT\\python-labs\\TEMA8\\Mod0.py
Mod1:Введите значение = 1
Mod1:Значение perm1= 1
perm1= 1
\*\*\*\*ALPHA\*\*\*\*
Значение t=1
tt= 1
qq= 23.140692632779267
Traceback (most recent call last):
File "D:\\!!!Download\\Documents\\учёба МЭИ\\5 СЕМЕСТР\\GIT\\python-labs\\TEMA8\\Mod0.py", line 12, in <module>
print(beta.expi)
AttributeError: 'function' object has no attribute 'expi'
```
Функция alpha не имеет атрибута t, так как t является локальной переменной, недоступной извне. Аналогично, переменная expi в функции beta также локальная и недоступна для обращения вне функции.
Теперь попробуем в модуле Mod0 увеличить в 3 раза значение переменной perm1:
```py
# Модуль Mod0
import Mod1
print('perm1=', Mod1.perm1)
from Mod2 import alpha as a1
tt = a1()
print('tt=', tt)
from Mod2 import beta
qq = beta(float(tt))
print('qq=', qq)
Mod1.perm1 = Mod1.perm1 * 3
print(Mod1.perm1)
```
```py
Mod1:Введите значение = 12
Mod1:Значение perm1= 12
perm1= 12
\*\*\*\*ALPHA\*\*\*\*
Значение t=2
tt= 2
qq= 535.4916555247646
121212
```
Так как perm1 - строковая переменная, то результат умножения - строка, длина которой в три раза больше.
Теперь попробуем увеличить значения переменных tt, qq и perm1 в 2 раза:
```py
>>> Mod0.tt
'2'
>>> Mod0.tt = Mod0.tt\*2
>>> Mod0.tt
'22'
>>> import Mod1
>>> Mod1.perm1
'3'
>>> Mod1.perm1 = Mod1.perm1 \* 2
>>> Mod1.perm1
'33'
>>> Mod0.qq
535.4916555247646
>>> Mod0.qq = Mod0.qq \* 2
>>> Mod0.qq
1070.9833110495292
```
В первых двух случаях умножение на два приводило к дублированию строки, поскольку функция alpha возвращает строковое значение t, а perm1 также является строкой. В случае с переменной qq, которая содержит результат функции beta (возвращающей вещественное число), умножение на два увеличивает численное значение, так как qq представляет собой число, а не строку.

@ -0,0 +1,147 @@
# Общее контрольное задание по теме 8
Грудинин Егор, А-03-23
## Задание
Разработайте программу, состоящую из трех модулей:
- Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколь-ко на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полу-ченный список должен возвращаться в вызывающую программу.
- Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.
- Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. За-тем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки.
Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы.
## Решение
### Задача 1
Содержание модуля M1:
```py
def readFile(fName):
fp = open(fName, 'r')
data = fp.read()
fp.close()
ls = list(map(int, data.replace('\n', ' ').split(' ')))
return ls
```
Содержание файла test_task.txt:
```py
1 2 3
3 4 5
6 7
8
```
Проверка:
```py
>>> import M1
>>> M1.readFile('test_task.txt')
[1, 2, 3, 3, 4, 5, 6, 7, 8]
```
### Задача 2
Содержание модуля M2:
```py
def corr(l1, l2):
N = len(l1)
m1 = sum(l1) / N
m2 = sum(l2) / N
a1 = 0
a2 = 0
a3 = 0
for i in range(N):
a1 += (l1[i] - m1) * (l2[i] - m2)
a2 += (l1[i] - m1) ** 2
a3 += (l2[i] - m2) ** 2
res = a1 / (((a2) * (a3)) ** 0.5)
return res
```
```py
>>> import M2
>>> M2.corr([1,2,3,4,5,6,7], [2,1,6,7,10,11,14])
0.9743547036924464
```
### Задача 3
Содержание модуля M3:
```py
from M1 import readFile
from M2 import corr
name1 = input('Введите имя первого файла: ')
name2 = input('Введите имя второго файла: ')
l1 = readFile(name1)
l2 = readFile(name2)
print(round(corr(l1, l2), 3))
```
Содержание файла test1.txt:
```py
1 2 3 4 5 1 2 3 4 5
```
Содержание файла test2.txt:
```py
2 3 6 8 10 1 2 3 4 9
```
```py
>>> import M3
Введите имя первого файла: test1.txt
Введите имя второго файла: test2.txt
0.901
```

Двоичные данные
TEMA9/img.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 14 KiB

Двоичные данные
TEMA9/img2.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 14 KiB

@ -0,0 +1,296 @@
# Отчет по теме 9
Грудинин Егор, А-03-23
## 1 Создание классов и их наследников
```py
>>> class Class1: #Объявление класса
def zad_zn(self,znach): #Метод 1 класса1 – задание значения data
self.data=znach # self - ссылка на экземпляр класса
def otobrazh(self): # Метод 2 класса1
print(self.data)#Отображение данных экземпляра класса
>>> z1=Class1() #Создаём 1-й экземпляр класса
>>> z2=Class1() #Создаём 2-й экземпляр класса
>>> z1.zad_zn('экз.класса 1') #Обращение к методу класса у 1-го экз.
>>> z2.zad_zn(-632.453) #Обращение к методу класса у 2-го экз.
>>> z1.otobrazh() # Обращение ко второму методу класса
экз.класса 1
>>> z2.otobrazh()
-632.453
>>> z1.data='Новое значение атрибута у экз.1'
>>> z1.otobrazh()
Новое значение атрибута у экз.1
>>> class Class2(Class1): #Class2 - наследник класса Class1
def otobrazh(self): # Метод класса Class2 – переопределяет метод родителя
print('значение=',self.data)#Отображение данных экземпляра
>>> z3=Class2()
>>> 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.otobrazh()
значение= Совсем новое
>>> z1.otobrazh()
Новое значение атрибута у экз.1
```
При вызове z3.otobrazh выполнился метод, определенный в классе Class2, несмотря на наличие одноименного метода в родительском классе, так как метод дочернего класса переопределяет родительский.
## 2 Использование классов, содержащихся в модулях
Содержимое модуля Mod3:
```py
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)
```
```py
>>> from Mod3 import Class1
>>> z4=Class1()
>>> z4.otobrazh()
Traceback (most recent call last):
File "<pyshell#25>", line 1, in <module>
z4.otobrazh()
File "D:\!!!Download\Documents\учёба МЭИ\5 СЕМЕСТР\GIT\python-labs\TEMA9\Mod3.py", line 5, in otobrazh
print(self.data)#Отображение данных экземпляра
AttributeError: 'Class1' object has no attribute 'data'
```
Ошибка возникает, так как мы не присвоили значения атрибуту data с помощью метода класса otobrazh().
```py
>>> from Mod3 import Class1
>>> z4=Class1()
>>> z4.data='значение данного data у экз.4'
>>> z4.otobrazh()
значение данного data у экз.4
>>> del z4
>>> import Mod3
>>> z4=Mod3.Class2()
>>> z4.zad_zn('Класс из модуля')
>>> z4.otobrazh()
значение= Класс из модуля
>>> Mod3.otobrazh('Объект')
значение объекта= Объект
```
Команда z4.otobrazh() вызывает метод класса Class2, поскольку z4 является экземпляром этого класса. Инструкция Mod3.otobrazh('Объект') вызывает самостоятельную функцию, объявленную в модуле Mod3, которая не является методом классов Class1 или Class2.
## 3 Использование специальных методов
```py
>>> class Class3(Class2): #Наследник класса Class2, а через него – и класса Class1
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
```
## 4 Присоединение атрибутов к классу
```py
>>> class Class3(Class2): #Наследник класса Class2, а через него – и класса Class1
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
>>> 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='Иванов И.И.'
>>> z7=Class3(123)
>>> 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']
>>> 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
'Иванов И.И.'
>>> Class3.fio
'Иванов И.И.'
```
Значение атрибута fio у экземпляра z7 совпадает со значением атрибута класса Class3.
```py
>>> 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']
```
Теперь можем заметить, что z7.rozden='1987' создает новый атрибут только у экземпляра z7, а не у самого класса Class3.
## 5 Выявление родительских классов
```py
>>> 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'>)
```
## 6 Создание свойства класса.
```py
>>> class Class4:
def __init__(sam,znach):
sam.__prm=znach
def chten(sam):
return sam.__prm
def zapis(sam,znch):
sam.__prm=znch
def stiran(sam):
del sam.__prm
svojstvo=property(chten,zapis,stiran)
>>> exempl=Class4(12)
>>> exempl.svojstvo
12
>>> exempl.svojstvo=45
>>> print(exempl.svojstvo)
45
>>> del exempl.svojstvo
>>> exempl.svojstvo
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
exempl.svojstvo
File "<pyshell#11>", line 5, in chten
return sam.__prm
AttributeError: 'Class4' object has no attribute '_Class4__prm'
```
Видим, что exempl.svojstvo вызывает метод chten, exempl.svojstvo=45 - метод zapis, а del exempl.svojstvo - удаление.
## 7 Представления в виде класса модели системы автоматического регулирования (САР)
Содержимое модуля 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 otobraz(self):
print('y=', self.ypr[1])
```
Содержимое модуля main_SAU.py:
```py
prm = [4, 1.3, 0.3] # Параметры модели: коэф.усиления, 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()
```
Результат вызова программы main_SAU.py:
```py
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
```
![img.png](img.png)
Результат вызова программы main_SAU.py при других параметрах:
```py
y= 0.0
y= 0.13392857142857142
y= 0.31150350765306123
y= 0.48237614311907795
y= 0.6233184628564087
y= 0.7278078571941651
y= 0.7983952660632807
y= 0.841607792159931
y= 0.8648697568601125
y= 0.8748780189025931
y= 0.8769323119338304
y= 0.8748306723342303
y= 0.8710536606893424
y= 0.867059038449276
y= 0.8635836565401162
y= 0.8609016510709495
y= 0.8590212297399084
y= 0.8578211023084384
y= 0.8571364936325719
y= 0.856807408748047
y= 0.8567011566332686
```
![img2.png](img2.png)

@ -0,0 +1,127 @@
# Общее контрольное задание по теме 9
Грудинин Егор, А-03-23
## Задание
Создайте и запишите в модуль класс, содержащий следующие компоненты:
- конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим фамилии сотрудников, название отделов, названия должностей сотрудников и размеры их окладов, некоторые начальные значения;
- метод для обеспечения операции повышения оклада сотрудника на заданное значение;
- метод для обеспечения перевода сотрудника из одного отдела в другой;
- метод для изменения должности сотрудника;
- свойство, содержащее перечень (список) поощрений сотрудника.
Создайте 2 экземпляра класса, задайте им некоторые значения атрибутов и свойства. Отобразите эти значения. Попробуйте с этими экземплярами операции перевода из отдела в отдел, изменения должности и оклада, объявления благодарности.
## Решение
Работа в интерпретаторе Python:
```py
>>> class myClass():
def __init__(self,fio,otdel,dolzhnost, oklad):
self.fio = fio
self.otdel = otdel
self.dolzhnost = dolzhnost
self.oklad = oklad
self.list_poosh = []
def incr(self, a):
self.oklad += a
def chOtdel(self, otdel):
self.otdel = otdel
def chDolzh(self, dolzhnost):
self.dolzhnost = dolzhnost
def blag(self, a):
self.list_poosh.append(a)
>>> a = myClass('Artem', 'Работоспособный', 'Рабочий', 1200)
>>> b = myClass('Petr', 'Интеллектуальный', 'Думатель', 2200)
>>> a.blag(['Молодец', 'Отличный работник'])
>>> a.list_poosh
[['Молодец', 'Отличный работник']]
>>> b.blag(['Красавчик'])
>>> b.list_poosh
[['Красавчик']]
>>> a.fio; a.otdel; a.dolzhnost; a.oklad
'Artem'
'Работоспособный'
'Рабочий'
1200
>>> b.fio; b.otdel; b.dolzhnost; b.oklad
'Petr'
'Интеллектуальный'
'Думатель'
2200
>>> a.chOtdel('Умственный')
>>> a.otdel
'Умственный'
>>> b.chDolzh('Умудренный')
>>> b.dolzhnost
'Умудренный'
>>> b.incr(1000)
>>> b.oklad
3200
```
Загрузка…
Отмена
Сохранить