{"id":397013,"date":"2024-06-29T13:11:29","date_gmt":"2024-06-29T13:11:29","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=397013"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=397013","title":{"rendered":"<span>\u041c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u044b \u0432 Python<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/e1c\/263\/da4\/e1c263da4ab7cda1814cba2c6df4b446.jpg\" width=\"1200\" height=\"579\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e1c\/263\/da4\/e1c263da4ab7cda1814cba2c6df4b446.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0423 \u043d\u0430\u0441 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f\u00a0<a href=\"https:\/\/habr.com\/ru\/company\/piter\/news\/t\/590621\/\">\u0440\u0430\u0441\u043f\u0440\u043e\u0434\u0430\u0436\u0430 \u0432 \u0447\u0435\u0441\u0442\u044c \u0447\u0435\u0440\u043d\u043e\u0439 \u043f\u044f\u0442\u043d\u0438\u0446\u044b<\/a>. \u0422\u0430\u043c \u0432\u044b \u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u043c\u043d\u043e\u0433\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u043d\u0438\u0433.<\/p>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u0435\u043d \u0432\u043e\u043f\u0440\u043e\u0441: \u0430 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435\u00a0<strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441<\/strong>? \u0415\u0441\u043b\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u043e, <strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441<\/strong>\u00a0\u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a\u00a0 <em>\u043a\u043b\u0430\u0441\u0441\u0443<\/em> \u0442\u043e\u0447\u043d\u043e \u043a\u0430\u043a\u00a0<em>\u043a\u043b\u0430\u0441\u0441<\/em>\u00a0\u043a\u00a0<em>\u043e\u0431\u044a\u0435\u043a\u0442\u0443<\/em>.<\/p>\n<p><strong>\u041c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u044b<\/strong>\u00a0\u2013 \u043d\u0435 \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u0430\u0441\u043f\u0435\u043a\u0442 \u044f\u0437\u044b\u043a\u0430 Python; \u043d\u0435 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043e \u043d\u0438\u0445 \u0432\u043e\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0442 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0431\u0435\u0441\u0435\u0434\u0435. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u043e\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0432\u0435\u0441\u044c\u043c\u0430 \u043c\u043d\u043e\u0433\u0438\u0445 \u0441\u0442\u0430\u0442\u0443\u0441\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445: \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, Django ORM<a href=\"#222\">[2]<\/a>, \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0445 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 (ABC)<a href=\"#333\">[3]<\/a>\u00a0\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Protocol Buffers <a href=\"#444\">[4]<\/a>.<\/p>\n<p>\u042d\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0444\u0438\u0447\u0430, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0443 \u043f\u0440\u0438\u0441\u043f\u043e\u0441\u043e\u0431\u0438\u0442\u044c \u043f\u043e\u0434 \u0437\u0430\u0434\u0430\u0447\u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0430\u043c\u044b\u0435 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u044f\u0437\u044b\u043a\u0430. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0442\u0430\u043a\u043e\u0439 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0437\u043b\u043e\u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0439 \u2013 \u043d\u043e \u043d\u0430\u0441 \u044d\u0442\u043e \u0443\u0436\u0435 \u043d\u0435 \u0443\u0434\u0438\u0432\u043b\u044f\u0435\u0442. <strong>\u0421 \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c<\/strong>. <\/p>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0442\u0435\u043c\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430\u0445 \u0438 \u0432\u0432\u043e\u0434\u043d\u044b\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u0445 \u043f\u043e \u044f\u0437\u044b\u043a\u0443, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u00ab\u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u043e\u0439\u00bb \u2014 \u043d\u043e \u0438 \u0441 \u043d\u0435\u0439 \u043d\u0430\u0434\u043e \u0441 \u0447\u0435\u0433\u043e-\u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c. \u042f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u043b \u0432 \u043e\u043d\u043b\u0430\u0439\u043d\u0435 \u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0435\u0433\u043e \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432 \u0442\u0435\u043c\u0443 \u043d\u0430\u0448\u0435\u043b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u043d\u0430 StackOverflow \u0438 \u043e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u043d\u0435\u0433\u043e <a href=\"#111\">[1]<\/a>.<\/p>\n<p>\u041f\u043e\u0435\u0445\u0430\u043b\u0438. \u0412\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043d\u0430 Python 3.6 \u2013 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u044d\u0442\u043e \u043d\u043e\u0432\u0435\u0439\u0448\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f.<\/p>\n<h2>\u041f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0430\u043a\u0442<\/h2>\n<p>\u041c\u044b \u0443\u0436\u0435 \u043a\u043e\u0435-\u0447\u0442\u043e \u0443\u0441\u043f\u0435\u043b\u0438 \u043e\u0431\u0441\u0443\u0434\u0438\u0442\u044c, \u043d\u043e \u043f\u043e\u043a\u0430 \u0435\u0449\u0435 \u043d\u0435 \u0432\u0438\u0434\u0435\u043b\u0438, \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 <strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441<\/strong>. \u0421\u043a\u043e\u0440\u043e \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f \u0441 \u044d\u0442\u0438\u043c, \u043d\u043e \u043f\u043e\u043a\u0430 \u0441\u043b\u0435\u0434\u0438\u0442\u0435 \u0437\u0430 \u043c\u043e\u0438\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u043e\u043c. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0447\u0435\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e: \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043e\u0431\u044a\u0435\u043a\u0442.<\/p>\n<pre><code class=\"python\">>>> o = object() >>> print(type(o)) &lt;class 'object'><\/code><\/pre>\n<p>\u041c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u043d\u043e\u0432\u044b\u0439\u00a0<code>object<\/code>\u00a0\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b\u0438 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043d\u0435\u0433\u043e \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439\u00a0<code>o<\/code>.<br \/> <strong>\u0422\u0438\u043f<\/strong>\u00a0<code>o<\/code>\u00a0\u2013 \u044d\u0442\u043e\u00a0<code>object<\/code>.<\/p>\n<p>\u041c\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0438 \u043d\u0430\u0448 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441:<\/p>\n<pre><code class=\"python\">>>> class A: ...     pass ... >>> a = A() >>> print(type(a)) &lt;class '__main__.A'><\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0434\u0432\u0435 \u043f\u043b\u043e\u0445\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435\u00a0<code>a<\/code>\u00a0\u0438\u00a0<code>o<\/code>, \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0432 \u0441\u0430\u043c\u043e\u043c \u043b\u0438 \u0434\u0435\u043b\u0435 \u043e\u043d\u0438 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043a\u043b\u0430\u0441\u0441\u0430\u043c:<\/p>\n<pre><code class=\"python\">>>> isinstance(o, object) True >>> isinstance(a, A) True >>> isinstance(a, object) True >>> issubclass(A, object) True<\/code><\/pre>\n<p>\u0412\u044b\u0448\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u0430 \u043e\u0434\u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0432\u0435\u0449\u044c: \u043e\u0431\u044a\u0435\u043a\u0442\u00a0<code>a<\/code>\u00a0\u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0442\u0438\u043f\u0443\u00a0<code>object<\/code>. \u0421\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0442\u0430\u043a\u043e\u0432\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043a\u043b\u0430\u0441\u0441 <code>A<\/code>\u00a0\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u0430\u0441\u0441\u043e\u043c\u00a0<code>object<\/code>\u00a0(\u0432\u0441\u0435 \u043a\u043b\u0430\u0441\u0441\u044b, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c, \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u043e\u0442 <code>object<\/code>).<\/p>\n<p>\u0415\u0449\u0435 \u043e\u0434\u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0432\u0435\u0449\u044c \u2013 \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430\u0445 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <code>a<\/code>\u00a0\u0438\u00a0<code>A<\/code>. \u0414\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043a\u0430\u043a <code>print<\/code> \u043d\u0435\u0432\u0435\u043b\u0438\u043a\u0430 \u0440\u0430\u0437\u043d\u0438\u0446\u0430, \u043a\u0430\u043a\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043c\u044b \u0435\u0439 \u0432\u044b\u0434\u0430\u0434\u0438\u043c, <code>a<\/code>\u00a0\u0438\u043b\u0438\u00a0<code>A<\/code>\u00a0\u2013 \u043e\u0431\u0430 \u0432\u044b\u0437\u043e\u0432\u0430 \u00ab\u0447\u0442\u043e-\u0442\u043e\u00bb \u0432\u044b\u0432\u0435\u0434\u0443\u0442 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d. <\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u043b\u0430\u0441\u0441 <code>B<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438:<\/p>\n<pre><code class=\"python\">>>> class B: ...     def __call__(self): ...         return 5 ... >>> b = B() >>> print(b) &lt;__main__.B object at 0x1032a5a58> >>> print(B) &lt;class '__main__.B'> >>> b.value = 6 >>> print(b.value) 6 >>> B.value = 7 >>> print(B.value) 7 >>> print(b()) 5 >>> print(B()) &lt;__main__.B object at 0x1032a58d0><\/code><\/pre>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c,\u00a0<code>b<\/code>\u00a0\u0438\u00a0<code>B<\/code>\u00a0\u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u043f\u043e\u0445\u043e\u0436\u0435. \u041c\u043e\u0436\u043d\u043e \u0434\u0430\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0431\u044b \u043e\u0431\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u044b \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0435\u0449\u0438:\u00a0<code>b<\/code>\u00a0\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 5, \u043a\u0430\u043a \u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u043a\u043b\u0430\u0441\u0441\u0430, \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a\u00a0<code>B<\/code>\u00a0\u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430.<\/p>\n<p>\u042d\u0442\u043e \u0441\u0445\u043e\u0434\u0441\u0442\u0432\u043e \u2013 \u043d\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0441\u0442\u044c, \u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0447\u0435\u0440\u0442\u0430 \u044f\u0437\u044b\u043a\u0430. \u0412 \u00a0Python\u00a0<strong>\u043a\u043b\u0430\u0441\u0441\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u043f\u0435\u0440\u0432\u043e\u0439 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438<\/strong><a href=\"#555\">[5]<\/a>\u00a0(\u0432\u0435\u0434\u0443\u0442 \u0441\u0435\u0431\u044f \u043a\u0430\u043a \u0432\u0441\u0435 <em>\u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435<\/em>\u00a0\u043e\u0431\u044a\u0435\u043a\u0442\u044b).<\/p>\n<p>\u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0435\u0441\u043b\u0438 \u043a\u043b\u0430\u0441\u0441\u044b \u2013 \u043a\u0430\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0442\u043e \u0443 \u043d\u0438\u0445 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0442\u0438\u043f:<\/p>\n<pre><code class=\"python\">>>> print(type(object)) &lt;class 'type'> >>> print(type(A)) &lt;class 'type'> >>> isinstance(object, type) True >>> isinstance(A, type) True >>> isinstance(A, object) True >>> issubclass(type, object) True<\/code><\/pre>\n<p>\u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0438\u00a0<code>object<\/code>, \u0438\u00a0<code>A<\/code>\u00a0\u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u043a\u043b\u0430\u0441\u0441\u0443\u00a0<code>type<\/code>\u00a0\u2013\u00a0<code>type<\/code>\u00a0\u044d\u0442\u043e &#171;\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441, \u0437\u0430\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e &#171;. \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043e\u0442 \u043d\u0435\u0433\u043e. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0432\u0430\u0441 \u0443\u0436\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0430\u0435\u0442, \u0447\u0442\u043e \u043a\u043b\u0430\u0441\u0441 \u0438\u043c\u0435\u0435\u0442 \u0438\u043c\u044f <code>type<\/code>, \u043d\u043e \u0432 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u044d\u0442\u043e \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0430\u044f \u0442\u0438\u043f \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 (\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u0443 <code>type<\/code>\u00a0 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u043d\u043e\u0439 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u044b \u0435\u043c\u0443 \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u0435 \u2013 1 \u0438\u043b\u0438 3). \u0412 \u0442\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435 \u0435\u0433\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442 \u043f\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c.<\/p>\n<p>\u041a\u0430\u043a\u00a0<code>object<\/code>, \u0442\u0430\u043a \u0438\u00a0<code>A<\/code>\u00a0\u0442\u0430\u043a\u0436\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f\u00a0<strong>\u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430\u043c\u0438<\/strong>\u00a0<code>object<\/code>\u00a0\u2013 \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435, \u0432\u0441\u0435 \u043e\u043d\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b. \u041a\u0430\u043a\u043e\u0432 \u0436\u0435 \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u0438\u043f\u00a0<code>type<\/code>, \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0432\u044b \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u044c? <\/p>\n<pre><code class=\"python\">>>> print(type(type)) &lt;class 'type'> >>> isinstance(type, type) True<\/code><\/pre>\n<p>\u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0434\u0432\u043e\u0439\u043d\u043e\u0433\u043e \u0434\u043d\u0430 \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u0442, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 <code>type<\/code>\u00a0\u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c\u0443\u00a0<strong>\u0442\u0438\u043f\u0443<\/strong>.<\/p>\n<p>\u0412\u0435\u0441\u044c \u0444\u043e\u043a\u0443\u0441, \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0432\u00a0<strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u0430\u0445<\/strong>: \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438\u00a0<code>A<\/code>, \u043f\u043e\u0434\u043a\u043b\u0430\u0441\u0441\u00a0<code>object<\/code>, \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043d\u043e\u0432\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 <code>a<\/code>\u00a0\u043e\u0442\u043d\u043e\u0441\u0438\u043b\u0441\u044f \u043a \u0442\u0438\u043f\u0443 <code>A<\/code>\u00a0\u0438, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e,\u00a0<code>object<\/code>. \u0422\u0430\u043a\u0438\u043c \u0436\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u0430\u0441\u0441 \u043e\u0442\u00a0<code>type<\/code>\u00a0\u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c\u00a0<code>Meta<\/code>. \u0412\u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043a\u0430\u043a \u0442\u0438\u043f \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445\u00a0<strong>\u043a\u043b\u0430\u0441\u0441\u043e\u0432<\/strong>; \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430\u043c\u0438 \u043e\u0431\u043e\u0438\u0445 \u0442\u0438\u043f\u043e\u0432:\u00a0<code>type<\/code>\u00a0\u0438\u00a0<code>Meta<\/code>.<\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u044d\u0442\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435:<\/p>\n<pre><code class=\"python\">class Meta(type):     def __init__(cls, name, bases, namespace):         super(Meta, cls).__init__(name, bases, namespace)         print(\"Creating new class: {}\".format(cls))              def __call__(cls):         new_instance = super(Meta, cls).__call__()         print(\"Class {} new instance: {}\".format(cls, new_instance))         return new_instance<\/code><\/pre>\n<p>\u042d\u0442\u043e \u043d\u0430\u0448 \u043f\u0435\u0440\u0432\u044b\u0439\u00a0<strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441<\/strong>. \u041c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0435\u0449\u0435 \u0431\u043e\u043b\u0435\u0435 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u044b\u043c, \u043d\u043e \u0445\u043e\u0442\u0435\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0432 \u0438\u0442\u043e\u0433\u0435 \u043e\u043d \u0434\u0435\u043b\u0430\u043b \u0445\u043e\u0442\u044f \u0431\u044b \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435.<\/p>\n<ul>\n<li>\n<p>\u041e\u043d \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434\u00a0<code>__init__<\/code>, \u00a0\u0447\u0442\u043e\u0431\u044b \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u0432\u044b\u0432\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432\u0441\u044f\u043a\u0438\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 <code>Meta<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u041e\u043d \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434\u00a0<code>call<\/code>\u00a0, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0432\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0432\u0441\u044f\u043a\u0438\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 <em>\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 <\/em>\u043a \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0443 \u2013 \u043f\u0438\u0448\u0435\u0442\u00a0<code>variable()<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432 Python \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 \u0438\u043c\u0435\u0435\u0442 \u0442\u0443 \u0436\u0435 \u0444\u043e\u0440\u043c\u0443, \u0447\u0442\u043e \u0438 \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u00a0<code>f<\/code>, \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0435\u0435, \u043c\u044b \u043f\u0438\u0448\u0435\u043c <code>f()<\/code>\u00a0. \u0415\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441 <code>A<\/code>, \u0442\u043e \u043c\u044b \u043f\u0438\u0448\u0435\u043c\u00a0<code>A()<\/code>\u00a0\u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0445\u0443\u043a\u00a0<code>__call__<\/code>.<\/p>\n<p>\u0412\u0441\u0435-\u0442\u0430\u043a\u0438,\u00a0<strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441<\/strong>\u00a0\u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u043d\u0435 \u0442\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f, \u043b\u0438\u0448\u044c \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u0430. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u044d\u0442\u043e \u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u043c:<\/p>\n<pre><code class=\"python\">>>> class C(metaclass=Meta): ...     pass ... Creating new class: &lt;class '__main__.C'> >>> c = C() Class &lt;class '__main__.C'> new instance: &lt;__main__.C object at 0x10e99ae48>  >>> print(c) &lt;__main__.C object at 0x10e99ae48><\/code><\/pre>\n<p>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u0430\u0448 \u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u0437\u0430\u0434\u0443\u043c\u0430\u043d\u043e: \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u0432 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0430\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0441 \u0442\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0443\u0440\u043e\u0432\u043d\u044f\u043c\u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 &#8212;\u00a0<strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u043e\u043c<\/strong>,\u00a0<strong>\u043a\u043b\u0430\u0441\u0441\u043e\u043c<\/strong> \u0438\u00a0<strong>\u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u043c<\/strong>.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u0438\u0448\u0435\u043c\u00a0<code>class C(metaclass=Meta)<\/code>, \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c <code>C<\/code>, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0441\u043e\u0431\u043e\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u00a0<code>Meta<\/code>\u00a0&#8212; \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f\u00a0<code>Meta.init<\/code>, \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435. \u041d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0448\u0430\u0433\u0435 \u043c\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c <code>C()<\/code>\u00a0\u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u043a\u043b\u0430\u0441\u0441\u0430\u00a0<code>C<\/code>, \u0438 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f <code>Meta.__call__<\/code>. \u041d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0448\u0430\u0433\u0435 \u043c\u044b \u0432\u044b\u0432\u0435\u043b\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u00a0<code>c<\/code>, \u0432\u044b\u0437\u044b\u0432\u0430\u044f\u00a0<code>C.__str__<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u0443\u044e \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u0432 \u0431\u0430\u0437\u043e\u0432\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435\u00a0<code>object<\/code>.<\/p>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0441\u0435 \u0442\u0438\u043f\u044b \u043d\u0430\u0448\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445: <\/p>\n<pre><code class=\"python\">>>> print(type(C)) &lt;class '__main__.Meta'> >>> isinstance(C, Meta) True >>> isinstance(C, type) True >>> issubclass(Meta, type) True >>> print(type(c)) &lt;class '__main__.C'> >>> isinstance(c, C) True >>> isinstance(c, object) True >>> issubclass(C, object) True<\/code><\/pre>\n<p>\u0412\u044b\u0448\u0435 \u044f \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u044f\u0433\u043a\u043e\u0435 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0442\u0435\u043c\u0443 <strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u043e\u0432\u00a0<\/strong>\u0438, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0432\u044b \u0443\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0435, \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435, \u0438 \u043a\u0430\u043a \u0438\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u041d\u043e, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u044d\u0442\u043e\u0442 \u0442\u0435\u043a\u0441\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u0431\u044b \u043d\u0435 \u0441\u0442\u043e\u0438\u043b \u0431\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432. \u041a \u043d\u0438\u043c \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c.<\/p>\n<h2>\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440: \u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d<\/h2>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043c\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0441\u043e\u0432\u0441\u0435\u043c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u043c\u0430\u043b\u043e\u0441\u0442\u044c <strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u043e\u0432<\/strong>. \u041c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c &#171;\u044d\u0441\u043a\u0438\u0437&#187; \u0434\u043b\u044f \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u00a0<a href=\"https:\/\/www.piter.com\/collection\/new\/product\/odnostrochniki-python-lakonichnyy-i-soderzhatelnyy-kod\"><em>\u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d<\/em><\/a>\u00a0<a href=\"#666\">[6]<\/a>\u00a0\u00a0\u2013 \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440. <\/p>\n<p>\u0427\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u0431\u0435\u0437 \u0432\u0441\u044f\u043a\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0432 \u043c\u0435\u0442\u043e\u0434\u00a0<code>__new__<\/code>\u00a0\u0432 \u0431\u0430\u0437\u043e\u0432\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435, \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0432\u0435\u0440\u043d\u0443\u043b \u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u043f\u043e\u043c\u043d\u0435\u043d\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440:<\/p>\n<pre><code class=\"python\">class SingletonBase:     instance = None      def __new__(cls, *args, **kwargs):         if cls.instance is None:             cls.instance = super().__new__(cls, *args, **kwargs)          return cls.instance<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0438 \u0432\u0441\u0435. \u041b\u044e\u0431\u043e\u0439 \u043f\u043e\u0434\u043a\u043b\u0430\u0441\u0441, \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043e\u0442\u00a0<code>SingletonBase<\/code>, \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d\u0430.<\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u043e\u0432 \u043e\u043d \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438:<\/p>\n<pre><code class=\"python\">>>> class A(SingletonBase): ...     pass ... >>> class B(A): ...     pass ... >>> print(A()) &lt;__main__.A object at 0x10c8d8710> >>> print(A()) &lt;__main__.A object at 0x10c8d8710> >>> print(B()) &lt;__main__.A object at 0x10c8d8710><\/code><\/pre>\n<p>\u0422\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0437\u0434\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c, \u0432\u0440\u043e\u0434\u0435 \u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u2013 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442. \u041d\u043e \u0435\u0441\u0442\u044c \u0438 \u0442\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u043c \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u043c: \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 <code>B<\/code> \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432 \u043e\u0442\u0432\u0435\u0442 \u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 <code>A<\/code>, \u0447\u0442\u043e \u0438 \u0440\u0430\u043d\u044c\u0448\u0435. <\/p>\n<p>\u042d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c, \u0438 \u043d\u0435 \u043f\u0440\u0438\u0431\u0435\u0433\u0430\u044f \u043d\u0438\u043a\u043e\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043a <strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u0430\u043c<\/strong>, \u043d\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441 \u043d\u0438\u043c\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0435 \u2013 \u0442\u0430\u043a \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u0438\u043c\u0438 \u043d\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f? <\/p>\n<p>\u0423 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 <code>SingletonBaseMeta<\/code>, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u0436\u0434\u044b\u0439 \u0435\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u0430\u0441\u0441 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u043e\u043b\u0435 <code>instance<\/code>\u00a0\u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c\u00a0<code>None<\/code>.<\/p>\n<p>\u0412\u043e\u0442 \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f:<\/p>\n<pre><code class=\"python\">class SingletonMeta(type):     def __init__(cls, name, bases, namespace):         super().__init__(name, bases, namespace)         cls.instance = None      def __call__(cls, *args, **kwargs):         if cls.instance is None:             cls.instance = super().__call__(*args, **kwargs)          return cls.instance   class SingletonBaseMeta(metaclass=SingletonMeta):     pass<\/code><\/pre>\n<p>\u041c\u043e\u0436\u0435\u043c \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c, \u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u0438 \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434:<\/p>\n<pre><code class=\"python\">>>> class A(SingletonBaseMeta): ...     pass ... >>> class B(A): ...     pass ... >>> print(A()) &lt;__main__.A object at 0x1101f6358> >>> print(A()) &lt;__main__.A object at 0x1101f6358> >>> print(B()) &lt;__main__.B object at 0x1101f6eb8><\/code><\/pre>\n<p>\u041f\u043e\u0437\u0434\u0440\u0430\u0432\u043b\u044f\u0435\u043c, \u043f\u043e-\u0432\u0438\u0434\u0438\u043c\u043e\u043c\u0443 \u043d\u0430\u0448\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430-\u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a, \u043a\u0430\u043a \u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c!<\/p>\n<p>\u041d\u0430 \u043f\u0440\u0430\u0432\u0430\u0445 \u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441 <em>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438<\/em>, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u043c\u0430\u0445\u043d\u0435\u043c\u0441\u044f \u043d\u0430 \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u0441\u043b\u043e\u0436\u043d\u0435\u0435.<\/p>\n<h2>\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440: \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u043e\u0435 ORM<\/h2>\n<p>\u041a\u0430\u043a \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u0448\u0435, \u0441 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u043c <em>\u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d<\/em>\u00a0\u043c\u043e\u0436\u043d\u043e \u043a\u0440\u0430\u0441\u0438\u0432\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u0441\u043b\u0435\u0433\u043a\u0430 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0438\u0441\u044c <strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438<\/strong>, \u043d\u043e \u043e\u0441\u0442\u0440\u043e\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u043d\u0438\u0445 \u043d\u0435\u0442. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 <strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u044b<\/strong>\u00a0\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u2013 \u044d\u0442\u043e \u0442\u0435 \u0438\u043b\u0438 \u0438\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0438 \u043d\u0430 \u0442\u0435\u043c\u0443 ORM<a href=\"#777\">[7]<\/a>.<\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u044b\u0439. \u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438\/\u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438 Python \u0438 JSON.<\/p>\n<p>\u0412\u043e\u0442 \u043a\u0430\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c (\u0441\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u0430 Django ORM\/SQLAlchemy):<\/p>\n<pre><code class=\"python\">class User(ORMBase):     \"\"\" \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432 \u043d\u0430\u0448\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \"\"\"     id = IntField(initial_value=0, maximum_value=2**32)     name = StringField(maximum_length=200)     surname = StringField(maximum_length=200)     height = IntField(maximum_value=300)     year_born = IntField(maximum_value=2017)<\/code><\/pre>\n<p>\u041c\u044b \u0445\u043e\u0442\u0438\u043c \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u044b \u0438 \u0438\u0445 \u043f\u043e\u043b\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0442\u0438\u043f\u0430\u043c\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0431\u044b \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448 \u043a\u043b\u0430\u0441\u0441 \u0432 JSON:<\/p>\n<pre><code class=\"python\">>>> u = User() >>> u.name = \"Guido\" >>> u.surname = \"van Rossum\" >>> print(\"User ID={}\".format(u.id)) User ID=0 >>> print(\"User JSON={}\".format(u.to_json())) User JSON={\"id\": 0, \"name\": \"Guido\", \"surname\": \"van Rossum\", \"height\": null, \"year_born\": null} <\/code><\/pre>\n<p>\u0418 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e:<\/p>\n<pre><code class=\"python\">>>> w = User('{\"id\": 5, \"name\": \"John\", \"surname\": \"Smith\", \"height\": 185, \"year_born\": 1989}') >>> print(\"User ID={}\".format(w.id)) User ID=5 >>> print(\"User NAME={}\".format(w.name)) User NAME=John<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u0432\u044b\u0448\u0435\u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u043c \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u0438 \u043d\u0443\u0436\u043d\u044b <strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u044b<\/strong>, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043e\u0434\u043d\u0443 \u00ab\u0438\u0437\u044e\u043c\u0438\u043d\u043a\u0443\u00bb &#8212; \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u00a0<strong>\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e<\/strong>.<\/p>\n<pre><code class=\"python\">>>> w.name = 5 Traceback (most recent call last):   File \"&lt;stdin>\", line 1, in &lt;module>   File \"simple-orm.py\", line 96, in __setattr__     raise AttributeError('Invalid value \"{}\" for field \"{}\"'.format(value, key)) AttributeError: Invalid value \"5\" for field \"name\" >>> w.middle_name = \"Stephen\" Traceback (most recent call last):   File \"&lt;stdin>\", line 1, in &lt;module>   File \"simple-orm.py\", line 98, in __setattr__     raise AttributeError('Unknown field \"{}\"'.format(key)) AttributeError: Unknown field \"middle_name\" >>> w.year_born = 3000 Traceback (most recent call last):   File \"&lt;stdin>\", line 1, in &lt;module>   File \"simple-orm.py\", line 96, in __setattr__     raise AttributeError('Invalid value \"{}\" for field \"{}\"'.format(value, key)) AttributeError: Invalid value \"3000\" for field \"year_born\"<\/code><\/pre>\n<h2>\u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435 \u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u0442\u0438\u043f\u043e\u0432<\/h2>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 ORM-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u044f \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0435\u0449\u0435 \u043e\u0431 \u043e\u0434\u043d\u043e\u0439 \u0432\u0435\u0449\u0438, \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u0442\u0438\u043f\u043e\u0432 <code>type<\/code>. \u042f \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b \u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0432\u0441\u043a\u043e\u043b\u044c\u0437\u044c, \u043d\u043e \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u0430\u044f \u0442\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c.<\/p>\n<p>\u0412\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u044d\u043f\u0438\u0437\u043e\u0434 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b\u0438 \u043c\u0435\u0442\u043e\u0434 <code>__init__<\/code>\u00a0 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u0430:<\/p>\n<pre><code class=\"python\">class Meta(type):     def __init__(cls, name, bases, namespace):<\/code><\/pre>\n<p>\u041e\u0442\u043a\u0443\u0434\u0430 \u0436\u0435 \u0432\u0437\u044f\u043b\u0438\u0441\u044c \u044d\u0442\u0438 \u0442\u0440\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 <code>name<\/code>,\u00a0<code>bases<\/code> \u0438\u00a0<code>namespace<\/code>? \u042d\u0442\u043e <strong>\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u0442\u0438\u043f\u043e\u0432<\/strong>. \u0422\u0440\u0438 \u044d\u0442\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u043a\u043b\u0430\u0441\u0441, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442.<\/p>\n<ul>\n<li>\n<p><strong>name<\/strong>\u00a0\u2013 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u043c\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0441\u0442\u0440\u043e\u043a\u0438<\/p>\n<\/li>\n<li>\n<p><strong>bases<\/strong>\u00a0\u2013 \u043a\u043e\u0440\u0442\u0435\u0436 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u043c<\/p>\n<\/li>\n<li>\n<p><strong>namespace<\/strong>\u00a0\u2013 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0432\u0441\u0435\u0445 \u043f\u043e\u043b\u0435\u0439, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043b\u0430\u0441\u0441\u0430. \u0421\u044e\u0434\u0430 \u0438\u0434\u0443\u0442 \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u043e\u0442 \u0438 \u0432\u0441\u0435, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0438 \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043a\u043b\u0430\u0441\u0441 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043e\u0431\u0449\u0435\u0433\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430, \u0430 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u00a0<code>type<\/code>\u00a0\u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e:<\/p>\n<pre><code class=\"python\">class A:     X = 5      def f(self):         print(\"Class A {}\".format(self))   def f(self):     print(\"Class B {}\".format(self))  B = type(\"B\", (), {'X': 6, 'f': f})<\/code><\/pre>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043a\u043e\u0434\u0435 \u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438 \u0434\u0432\u0430 \u043f\u043e\u0447\u0442\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u0430,\u00a0<code>A<\/code>\u00a0\u0438\u00a0<code>B<\/code>.<\/p>\n<p>\u0423 \u043d\u0438\u0445 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043a\u043b\u0430\u0441\u0441\u0430\u00a0<code>X<\/code>, \u0438 \u0432\u044b\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u0440\u0430\u0437\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043c\u0435\u0442\u043e\u0434\u0430\u00a0<code>f<\/code>. \u041d\u043e \u043d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0435 \u2013 \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0442\u043b\u0438\u0447\u0438\u0439 \u043d\u0435\u0442, \u0438 \u043e\u0431\u0430 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b. \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 Python \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u0438\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0437\u0434\u0435\u0441\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439.<\/p>\n<pre><code class=\"python\">>>> print(A) &lt;class '__main__.A'> >>> print(B) &lt;class '__main__.B'> >>> print(A.X) 5 >>> print(B.X) 6 >>> a = A() >>> b = B() >>> a.f() Class A &lt;__main__.A object at 0x1023432b0> >>> b.f() Class B &lt;__main__.B object at 0x1023431d0><\/code><\/pre>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e <strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u0430<\/strong>\u00a0\u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0430\u043c \u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f. \u041c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0443 <code>type<\/code>, \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0445 \u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043a\u0430\u043a \u0432\u0430\u043c \u0443\u0433\u043e\u0434\u043d\u043e. <\/p>\n<h2>\u0423\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u043e\u0435 ORM \u2013 \u0433\u0440\u0430\u043c\u043e\u0442\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430<\/h2>\n<p>\u041c\u044b \u0443\u0436\u0435 \u0437\u043d\u0430\u0435\u043c, \u0447\u0435\u0433\u043e \u0445\u043e\u0442\u0438\u043c \u2013 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0443\u044e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430. \u041c\u044b \u0442\u0430\u043a\u0436\u0435 \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0440\u0435\u0448\u0430\u0442\u044c \u044d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u043e\u0432<\/strong>.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0432 \u0441\u0442\u0438\u043b\u0435 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%93%D1%80%D0%B0%D0%BC%D0%BE%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5\">\u0433\u0440\u0430\u043c\u043e\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/a>. \u041a\u043e\u0434 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 Python \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c.<\/p>\n<p>\u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u043f\u0430\u043a\u0435\u0442 \u2013 \u0434\u043b\u044f \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u0431\u043e\u0440\u0430\/\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 JSON:<\/p>\n<pre><code class=\"python\">import json<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043d\u0430\u0448\u0438\u0445 \u043f\u043e\u043b\u0435\u0439. \u041e\u043d \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u0432\u0435\u0441\u044c\u043c\u0430 \u043f\u0440\u043e\u0441\u0442\u043e, \u043a\u0430\u043a \u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u0434\u0430\u043d\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0412 \u043d\u0435\u043c \u0435\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f-\u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0430 \u0434\u043b\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043f\u0443\u0441\u0442\u043e\u0435 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<pre><code class=\"python\">class Field:     \"\"\" \u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u043b\u0435\u0439. \u041a\u0430\u0436\u0434\u043e\u043c\u0443 \u043f\u043e\u043b\u044e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u043e \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \"\"\"      def __init__(self, initial_value=None):         self.initial_value = initial_value      def validate(self, value):         \"\"\" \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u043c \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f \"\"\"         return True<\/code><\/pre>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e \u0432\u0441\u0435\u0433\u043e \u0434\u0432\u0430 \u043f\u043e\u0434\u043a\u043b\u0430\u0441\u0441\u0430\u00a0<code>Field<\/code>:\u00a0<code>IntField<\/code>\u00a0\u0438\u00a0<code>StringField<\/code>. \u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435. <\/p>\n<pre><code class=\"python\">class StringField(Field):     \"\"\" \u0421\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435. \u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0432 \u043d\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0434\u043b\u0438\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0438 \"\"\"      def __init__(self, initial_value=None, maximum_length=None):         super().__init__(initial_value)          self.maximum_length = maximum_length      def validate(self, value):         \"\"\" \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u043c \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f \"\"\"         if super().validate(value):             return (value is None) or (isinstance(value, str) and self._validate_length(value))         else:             return False      def _validate_length(self, value):         \"\"\" \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0438\u043c\u0435\u0435\u0442 \u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0430 \u0432\u0435\u0440\u043d\u0443\u044e \u0434\u043b\u0438\u043d\u0443 \"\"\"         return (self.maximum_length is None) or (len(value) &lt;= self.maximum_length)   class IntField(Field):     \"\"\" \u0426\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u043f\u043e\u043b\u0435. \u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u0432 \u043d\u0435\u043c \u0447\u0438\u0441\u043b\u043e \u0446\u0435\u043b\u044b\u043c\"\"\"      def __init__(self, initial_value=None, maximum_value=None):         super().__init__(initial_value)          self.maximum_value = maximum_value      def validate(self, value):         \"\"\" \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u043c \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f \"\"\"         if super().validate(value):             return (value is None) or (isinstance(value, int) and self._validate_value(value))         else:             return False      def _validate_value(self, value):         \"\"\" \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043b\u0438 \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u043a \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u043c\u0443 \u0434\u043c\u0430\u043f\u0430\u0437\u043e\u043d\u0443 \"\"\"         return (self.maximum_value is None) or (value &lt;= self.maximum_value)<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u00a0<code>initial_value<\/code>\u00a0\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0443 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0438\u0437 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438. \u041e\u043f\u044f\u0442\u044c \u0436\u0435, \u043d\u0435 \u0441\u043b\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043d\u0435\u0433\u043e \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0430\u043a\u0442\u044b \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438, \u043d\u043e \u044f \u0445\u043e\u0442\u0435\u043b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0443\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438.<\/p>\n<p>\u0412\u00a0<code>StringField<\/code>\u00a0\u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c\u0443 \u0442\u0438\u043f\u0443 \u2013\u00a0<code>str<\/code>, \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0434\u043b\u0438\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u043c\u0435\u043d\u044c\u0448\u0435\u0439 \u0438\u043b\u0438 \u0440\u0430\u0432\u043d\u043e\u0439 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e (\u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e). \u0412 \u043f\u043e\u043b\u0435 <code>IntField<\/code>\u00a0\u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0446\u0435\u043b\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c, \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u043e\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0438\u043c \u0438\u043b\u0438 \u0440\u0430\u0432\u043d\u044b\u043c, \u0447\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u043d\u043e\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0412\u0430\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c: \u043c\u044b \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043f\u043e\u043b\u044f\u0445 \u0431\u044b\u043b\u0438 \u0440\u0430\u0432\u043d\u044b <code>None<\/code>. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c <strong>\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435<\/strong>\u00a0\u043f\u043e\u043b\u044f, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u00a0<code>None<\/code>.<\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 \u2013 \u044d\u0442\u043e \u043d\u0430\u0448\u00a0<strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441<\/strong>:<\/p>\n<pre><code class=\"python\">class ORMMeta(type):     \"\"\" \u041c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e ORM \"\"\"     def __new__(self, name, bases, namespace):         fields = {             name: field             for name, field in namespace.items()             if isinstance(field, Field)         }          new_namespace = namespace.copy()          # \u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u043b\u044f, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0435\u0441\u044f \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u043a\u043b\u0430\u0441\u0441\u0430         for name in fields.keys():             del new_namespace[name]          new_namespace['_fields'] = fields          return super().__new__(self, name, bases, new_namespace)<\/code><\/pre>\n<p>\u041d\u0430\u0448 \u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u043c. \u0412 \u043d\u0435\u043c \u043e\u0434\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0438 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u2013 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b <code>Field<\/code>\u00a0\u0432 \u043d\u043e\u0432\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043a\u043b\u0430\u0441\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>_fields<\/code>. \u0412\u0441\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u043f\u043e\u043b\u0435\u0439 \u0442\u0430\u043a\u0436\u0435 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u0437 \u0441\u043b\u043e\u0432\u0430\u0440\u044f \u043a\u043b\u0430\u0441\u0441\u0430.<\/p>\n<p>\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0432\u0435\u0449\u044c, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043d\u0430\u0448 <strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441<\/strong>\u00a0\u2013 \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u043b\u0441\u044f \u0432 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0448 \u043a\u043b\u0430\u0441\u0441, \u0431\u0440\u0430\u043b \u0432\u0441\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b \u0438\u0445 \u0432\u0441\u0435 \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435.<\/p>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0431\u0430\u0437\u043e\u0432\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435 \u043d\u0430\u0448\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:<\/p>\n<pre><code class=\"python\">class ORMBase(metaclass=ORMMeta):     \"\"\" \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \"\"\"      def __init__(self, json_input=None):         for name, field in self._fields.items():             setattr(self, name, field.initial_value)          # \u0415\u0441\u043b\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f JSON, \u0442\u043e \u043c\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u0435\u0433\u043e         if json_input is not None:             json_value = json.loads(json_input)              if not isinstance(json_value, dict):                 raise RuntimeError(\"Supplied JSON must be a dictionary\")              for key, value in json_value.items():                 setattr(self, key, value)      def __setattr__(self, key, value):         \"\"\" \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \"\"\"         if key in self._fields:             if self._fields[key].validate(value):                 super().__setattr__(key, value)             else:                 raise AttributeError('Invalid value \"{}\" for field \"{}\"'.format(value, key))         else:             raise AttributeError('Unknown field \"{}\"'.format(key))      def to_json(self):         \"\"\" \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 JSON \"\"\"         new_dictionary = {}          for name in self._fields.keys():             new_dictionary[name] = getattr(self, name)          return json.dumps(new_dictionary)<\/code><\/pre>\n<p>\u0423 \u043a\u043b\u0430\u0441\u0441\u0430\u00a0<code>ORMBase<\/code>\u00a0\u0442\u0440\u0438 \u043c\u0435\u0442\u043e\u0434\u0430, \u0438 \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043d\u0438\u0445 \u0441\u0432\u043e\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430:<\/p>\n<ul>\n<li>\n<p><code>__init__<\/code>\u00a0&#8212; \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u043f\u043e\u043b\u044f \u0432 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0417\u0430\u0442\u0435\u043c, \u0435\u0441\u043b\u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON, \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0435\u0433\u043e \u0438 \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u043b\u044f\u043c \u043d\u0430\u0448\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0438. <\/p>\n<\/li>\n<li>\n<p> <code>__setattr__<\/code>\u00a0&#8212; \u042d\u0442\u043e \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u0432\u0441\u044f\u043a\u0438\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u043a\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f <strong>\u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c<\/strong>\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0443 \u043a\u043b\u0430\u0441\u0441\u0430. \u041a\u043e\u0433\u0434\u0430 \u043a\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u00a0<code>object.attribute = value<\/code>, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 <code>object.__setattr__(\"attribute\", value)<\/code>. \u041f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0432 \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2013 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0438\u043d\u044a\u0435\u043a\u0446\u0438\u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<\/li>\n<li>\n<p><code>to_json<\/code>\u00a0\u2013 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0438\u0437 \u0432\u0441\u0435\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0432 \u043a\u043b\u0430\u0441\u0441\u0435. \u041f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0441\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 \u0438 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0438\u0445 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 JSON.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u043e\u0442 \u0438 \u0432\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u2013 \u043d\u0430\u0448\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0433\u043e\u0442\u043e\u0432\u0430. \u041c\u043e\u0436\u0435\u0442\u0435 \u0441\u0430\u043c\u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043e, \u0438 \u043c\u0435\u043d\u044f\u0442\u044c \u0435\u0435, \u0435\u0441\u043b\u0438 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438\u043d\u0430\u0447\u0435.<\/p>\n<pre><code class=\"python\">>>> User('{\"name\": 5}') Traceback (most recent call last):   File \"\/usr\/local\/lib\/python3.6\/site-packages\/IPython\/core\/interactiveshell.py\", line 2881, in run_code     exec(code_obj, self.user_global_ns, self.user_ns)   File \"&lt;ipython-input-1-76a1a93378fc>\", line 1, in &lt;module>     User('{\"name\": 5}')   File \"\/Users\/jrx\/repos\/metaclass-playground\/simple-orm.py\", line 86, in __init__     setattr(self, key, value)   File \"\/Users\/jrx\/repos\/metaclass-playground\/simple-orm.py\", line 94, in __setattr__     raise AttributeError('Invalid value \"{}\" for field \"{}\"'.format(value, key)) AttributeError: Invalid value \"5\" for field \"name\"<\/code><\/pre>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f<\/h2>\n<p>\u0412\u0435\u0441\u044c \u043a\u043e\u0434 \u043a \u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u0442\u0443 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043d\u0430 GitHub\u00a0<a href=\"#888\">[8]<\/a>.<\/p>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0432\u0430\u043c \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0430\u0441\u044c \u0438 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u043b\u0430 \u0432\u0430\u043c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0438\u0434\u0435\u0438.\u00a0<strong>\u041c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u044b<\/strong>\u00a0\u043c\u043e\u0433\u0443\u0442 \u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c\u0438 \u0438 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c\u0438. \u041e\u0434\u043d\u0430\u043a\u043e, \u043e\u043d\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b, \u0435\u0441\u043b\u0438 \u0443\u043c\u0435\u0442\u044c \u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u00a0<strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u044b<\/strong>\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0436\u0438\u0437\u043d\u0438, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u0435\u00a0<a href=\"#999\">[9]<\/a>.<\/p>\n<h3>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438<\/h3>\n<p><a class=\"anchor\" name=\"111\" id=\"111\"><\/a><\/p>\n<ul>\n<li>\n<p>[1]\u00a0<a href=\"http:\/\/stackoverflow.com\/questions\/100003\/what-is-a-metaclass-in-python\">http:\/\/stackoverflow.com\/questions\/100003\/what-is-a-metaclass-in-python<\/a><\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"222\" id=\"222\"><\/a><\/p>\n<ul>\n<li>\n<p>[2]\u00a0<a href=\"https:\/\/docs.djangoproject.com\/en\/1.10\/topics\/db\/\">https:\/\/docs.djangoproject.com\/en\/1.10\/topics\/db\/<\/a><\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"333\" id=\"333\"><\/a><\/p>\n<ul>\n<li>\n<p>[3]\u00a0<a href=\"https:\/\/docs.python.org\/3\/library\/abc.html#abc.ABCMeta\">https:\/\/docs.python.org\/3\/library\/abc.html#abc.ABCMeta<\/a><\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"444\" id=\"444\"><\/a><\/p>\n<ul>\n<li>\n<p>[4]\u00a0<a href=\"https:\/\/developers.google.com\/protocol-buffers\/docs\/pythontutorial\">https:\/\/developers.google.com\/protocol-buffers\/docs\/pythontutorial<\/a><\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"555\" id=\"555\"><\/a><\/p>\n<ul>\n<li>\n<p>[5]\u00a0<a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82_%D0%BF%D0%B5%D1%80%D0%B2%D0%BE%D0%B3%D0%BE_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0\">https:\/\/ru.wikipedia.org\/wiki\/\u041e\u0431\u044a\u0435\u043a\u0442_\u043f\u0435\u0440\u0432\u043e\u0433\u043e_\u043a\u043b\u0430\u0441\u0441\u0430<\/a><\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"666\" id=\"666\"><\/a><\/p>\n<ul>\n<li>\n<p>[6]\u00a0<a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9E%D0%B4%D0%B8%D0%BD%D0%BE%D1%87%D0%BA%D0%B0_(%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)\">https:\/\/ru.wikipedia.org\/wiki\/\u041e\u0434\u0438\u043d\u043e\u0447\u043a\u0430_(\u0448\u0430\u0431\u043b\u043e\u043d_\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f)<\/a><\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"777\" id=\"777\"><\/a><\/p>\n<ul>\n<li>\n<p>[7]\u00a0<a href=\"https:\/\/ru.wikipedia.org\/wiki\/ORM\">https:\/\/ru.wikipedia.org\/wiki\/ORM<\/a><\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"888\" id=\"888\"><\/a><\/p>\n<ul>\n<li>\n<p>[8]\u00a0<a href=\"https:\/\/github.com\/MillionIntegrals\/metaclass-playground\">https:\/\/github.com\/MillionIntegrals\/metaclass-playground<\/a><\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"999\" id=\"999\"><\/a><\/p>\n<ul>\n<li>\n<p>[9]\u00a0<a href=\"http:\/\/eli.thegreenplace.net\/2011\/08\/14\/python-metaclasses-by-example\">http:\/\/eli.thegreenplace.net\/2011\/08\/14\/python-metaclasses-by-example<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/592127\/\"> https:\/\/habr.com\/ru\/articles\/592127\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0423 \u043d\u0430\u0441 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f\u00a0<a href=\"https:\/\/habr.com\/ru\/company\/piter\/news\/t\/590621\/\">\u0440\u0430\u0441\u043f\u0440\u043e\u0434\u0430\u0436\u0430 \u0432 \u0447\u0435\u0441\u0442\u044c \u0447\u0435\u0440\u043d\u043e\u0439 \u043f\u044f\u0442\u043d\u0438\u0446\u044b<\/a>. \u0422\u0430\u043c \u0432\u044b \u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u043c\u043d\u043e\u0433\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u043d\u0438\u0433.<\/p>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u0435\u043d \u0432\u043e\u043f\u0440\u043e\u0441: \u0430 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435\u00a0<strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441<\/strong>? \u0415\u0441\u043b\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u043e, <strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441<\/strong>\u00a0\u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a\u00a0 <em>\u043a\u043b\u0430\u0441\u0441\u0443<\/em> \u0442\u043e\u0447\u043d\u043e \u043a\u0430\u043a\u00a0<em>\u043a\u043b\u0430\u0441\u0441<\/em>\u00a0\u043a\u00a0<em>\u043e\u0431\u044a\u0435\u043a\u0442\u0443<\/em>.<\/p>\n<p><strong>\u041c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u044b<\/strong>\u00a0\u2013 \u043d\u0435 \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u0430\u0441\u043f\u0435\u043a\u0442 \u044f\u0437\u044b\u043a\u0430 Python; \u043d\u0435 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043e \u043d\u0438\u0445 \u0432\u043e\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0442 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0431\u0435\u0441\u0435\u0434\u0435. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u043e\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0432\u0435\u0441\u044c\u043c\u0430 \u043c\u043d\u043e\u0433\u0438\u0445 \u0441\u0442\u0430\u0442\u0443\u0441\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445: \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, Django ORM<a href=\"#222\">[2]<\/a>, \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0445 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 (ABC)<a href=\"#333\">[3]<\/a>\u00a0\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Protocol Buffers <a href=\"#444\">[4]<\/a>.<\/p>\n<p>\u042d\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0444\u0438\u0447\u0430, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0443 \u043f\u0440\u0438\u0441\u043f\u043e\u0441\u043e\u0431\u0438\u0442\u044c \u043f\u043e\u0434 \u0437\u0430\u0434\u0430\u0447\u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0430\u043c\u044b\u0435 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u044f\u0437\u044b\u043a\u0430. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0442\u0430\u043a\u043e\u0439 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0437\u043b\u043e\u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0439 \u2013 \u043d\u043e \u043d\u0430\u0441 \u044d\u0442\u043e \u0443\u0436\u0435 \u043d\u0435 \u0443\u0434\u0438\u0432\u043b\u044f\u0435\u0442. <strong>\u0421 \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c<\/strong>. <\/p>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0442\u0435\u043c\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430\u0445 \u0438 \u0432\u0432\u043e\u0434\u043d\u044b\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u0445 \u043f\u043e \u044f\u0437\u044b\u043a\u0443, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u00ab\u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u043e\u0439\u00bb \u2014 \u043d\u043e \u0438 \u0441 \u043d\u0435\u0439 \u043d\u0430\u0434\u043e \u0441 \u0447\u0435\u0433\u043e-\u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c. \u042f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u043b \u0432 \u043e\u043d\u043b\u0430\u0439\u043d\u0435 \u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0435\u0433\u043e \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432 \u0442\u0435\u043c\u0443 \u043d\u0430\u0448\u0435\u043b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u043d\u0430 StackOverflow \u0438 \u043e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u043d\u0435\u0433\u043e <a href=\"#111\">[1]<\/a>.<\/p>\n<p>\u041f\u043e\u0435\u0445\u0430\u043b\u0438. \u0412\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043d\u0430 Python 3.6 \u2013 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u044d\u0442\u043e \u043d\u043e\u0432\u0435\u0439\u0448\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f.<\/p>\n<h2>\u041f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0430\u043a\u0442<\/h2>\n<p>\u041c\u044b \u0443\u0436\u0435 \u043a\u043e\u0435-\u0447\u0442\u043e \u0443\u0441\u043f\u0435\u043b\u0438 \u043e\u0431\u0441\u0443\u0434\u0438\u0442\u044c, \u043d\u043e \u043f\u043e\u043a\u0430 \u0435\u0449\u0435 \u043d\u0435 \u0432\u0438\u0434\u0435\u043b\u0438, \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 <strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441<\/strong>. \u0421\u043a\u043e\u0440\u043e \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f \u0441 \u044d\u0442\u0438\u043c, \u043d\u043e \u043f\u043e\u043a\u0430 \u0441\u043b\u0435\u0434\u0438\u0442\u0435 \u0437\u0430 \u043c\u043e\u0438\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u043e\u043c. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0447\u0435\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e: \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043e\u0431\u044a\u0435\u043a\u0442.<\/p>\n<pre><code class=\"python\">>>> o = object() >>> print(type(o)) &lt;class 'object'><\/code><\/pre>\n<p>\u041c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u043d\u043e\u0432\u044b\u0439\u00a0<code>object<\/code>\u00a0\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b\u0438 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043d\u0435\u0433\u043e \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439\u00a0<code>o<\/code>.<br \/> <strong>\u0422\u0438\u043f<\/strong>\u00a0<code>o<\/code>\u00a0\u2013 \u044d\u0442\u043e\u00a0<code>object<\/code>.<\/p>\n<p>\u041c\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0438 \u043d\u0430\u0448 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441:<\/p>\n<pre><code class=\"python\">>>> class A: ...     pass ... >>> a = A() >>> print(type(a)) &lt;class '__main__.A'><\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0434\u0432\u0435 \u043f\u043b\u043e\u0445\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435\u00a0<code>a<\/code>\u00a0\u0438\u00a0<code>o<\/code>, \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0432 \u0441\u0430\u043c\u043e\u043c \u043b\u0438 \u0434\u0435\u043b\u0435 \u043e\u043d\u0438 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043a\u043b\u0430\u0441\u0441\u0430\u043c:<\/p>\n<pre><code class=\"python\">>>> isinstance(o, object) True >>> isinstance(a, A) True >>> isinstance(a, object) True >>> issubclass(A, object) True<\/code><\/pre>\n<p>\u0412\u044b\u0448\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u0430 \u043e\u0434\u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0432\u0435\u0449\u044c: \u043e\u0431\u044a\u0435\u043a\u0442\u00a0<code>a<\/code>\u00a0\u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0442\u0438\u043f\u0443\u00a0<code>object<\/code>. \u0421\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0442\u0430\u043a\u043e\u0432\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043a\u043b\u0430\u0441\u0441 <code>A<\/code>\u00a0\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u0430\u0441\u0441\u043e\u043c\u00a0<code>object<\/code>\u00a0(\u0432\u0441\u0435 \u043a\u043b\u0430\u0441\u0441\u044b, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c, \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u043e\u0442 <code>object<\/code>).<\/p>\n<p>\u0415\u0449\u0435 \u043e\u0434\u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0432\u0435\u0449\u044c \u2013 \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430\u0445 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <code>a<\/code>\u00a0\u0438\u00a0<code>A<\/code>. \u0414\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043a\u0430\u043a <code>print<\/code> \u043d\u0435\u0432\u0435\u043b\u0438\u043a\u0430 \u0440\u0430\u0437\u043d\u0438\u0446\u0430, \u043a\u0430\u043a\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043c\u044b \u0435\u0439 \u0432\u044b\u0434\u0430\u0434\u0438\u043c, <code>a<\/code>\u00a0\u0438\u043b\u0438\u00a0<code>A<\/code>\u00a0\u2013 \u043e\u0431\u0430 \u0432\u044b\u0437\u043e\u0432\u0430 \u00ab\u0447\u0442\u043e-\u0442\u043e\u00bb \u0432\u044b\u0432\u0435\u0434\u0443\u0442 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d. <\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u043b\u0430\u0441\u0441 <code>B<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438:<\/p>\n<pre><code class=\"python\">>>> class B: ...     def __call__(self): ...         return 5 ... >>> b = B() >>> print(b) &lt;__main__.B object at 0x1032a5a58> >>> print(B) &lt;class '__main__.B'> >>> b.value = 6 >>> print(b.value) 6 >>> B.value = 7 >>> print(B.value) 7 >>> print(b()) 5 >>> print(B()) &lt;__main__.B object at 0x1032a58d0><\/code><\/pre>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c,\u00a0<code>b<\/code>\u00a0\u0438\u00a0<code>B<\/code>\u00a0\u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u043f\u043e\u0445\u043e\u0436\u0435. \u041c\u043e\u0436\u043d\u043e \u0434\u0430\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0431\u044b \u043e\u0431\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u044b \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0435\u0449\u0438:\u00a0<code>b<\/code>\u00a0\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 5, \u043a\u0430\u043a \u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u043a\u043b\u0430\u0441\u0441\u0430, \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a\u00a0<code>B<\/code>\u00a0\u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430.<\/p>\n<p>\u042d\u0442\u043e \u0441\u0445\u043e\u0434\u0441\u0442\u0432\u043e \u2013 \u043d\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0441\u0442\u044c, \u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0447\u0435\u0440\u0442\u0430 \u044f\u0437\u044b\u043a\u0430. \u0412 \u00a0Python\u00a0<strong>\u043a\u043b\u0430\u0441\u0441\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u043f\u0435\u0440\u0432\u043e\u0439 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438<\/strong><a href=\"#555\">[5]<\/a>\u00a0(\u0432\u0435\u0434\u0443\u0442 \u0441\u0435\u0431\u044f \u043a\u0430\u043a \u0432\u0441\u0435 <em>\u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435<\/em>\u00a0\u043e\u0431\u044a\u0435\u043a\u0442\u044b).<\/p>\n<p>\u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0435\u0441\u043b\u0438 \u043a\u043b\u0430\u0441\u0441\u044b \u2013 \u043a\u0430\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0442\u043e \u0443 \u043d\u0438\u0445 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0442\u0438\u043f:<\/p>\n<pre><code class=\"python\">>>> print(type(object)) &lt;class 'type'> >>> print(type(A)) &lt;class 'type'> >>> isinstance(object, type) True >>> isinstance(A, type) True >>> isinstance(A, object) True >>> issubclass(type, object) True<\/code><\/pre>\n<p>\u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0438\u00a0<code>object<\/code>, \u0438\u00a0<code>A<\/code>\u00a0\u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u043a\u043b\u0430\u0441\u0441\u0443\u00a0<code>type<\/code>\u00a0\u2013\u00a0<code>type<\/code>\u00a0\u044d\u0442\u043e &#171;\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441, \u0437\u0430\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e &#171;. \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043e\u0442 \u043d\u0435\u0433\u043e. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0432\u0430\u0441 \u0443\u0436\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0430\u0435\u0442, \u0447\u0442\u043e \u043a\u043b\u0430\u0441\u0441 \u0438\u043c\u0435\u0435\u0442 \u0438\u043c\u044f <code>type<\/code>, \u043d\u043e \u0432 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u044d\u0442\u043e \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0430\u044f \u0442\u0438\u043f \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 (\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u0443 <code>type<\/code>\u00a0 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u043d\u043e\u0439 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u044b \u0435\u043c\u0443 \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u0435 \u2013 1 \u0438\u043b\u0438 3). \u0412 \u0442\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435 \u0435\u0433\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442 \u043f\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c.<\/p>\n<p>\u041a\u0430\u043a\u00a0<code>object<\/code>, \u0442\u0430\u043a \u0438\u00a0<code>A<\/code>\u00a0\u0442\u0430\u043a\u0436\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f\u00a0<strong>\u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430\u043c\u0438<\/strong>\u00a0<code>object<\/code>\u00a0\u2013 \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435, \u0432\u0441\u0435 \u043e\u043d\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b. \u041a\u0430\u043a\u043e\u0432 \u0436\u0435 \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u0438\u043f\u00a0<code>type<\/code>, \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0432\u044b \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u044c? <\/p>\n<pre><code class=\"python\">>>> print(type(type)) &lt;class 'type'> >>> isinstance(type, type) True<\/code><\/pre>\n<p>\u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0434\u0432\u043e\u0439\u043d\u043e\u0433\u043e \u0434\u043d\u0430 \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u0442, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 <code>type<\/code>\u00a0\u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c\u0443\u00a0<strong>\u0442\u0438\u043f\u0443<\/strong>.<\/p>\n<p>\u0412\u0435\u0441\u044c \u0444\u043e\u043a\u0443\u0441, \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0432\u00a0<strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u0430\u0445<\/strong>: \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438\u00a0<code>A<\/code>, \u043f\u043e\u0434\u043a\u043b\u0430\u0441\u0441\u00a0<code>object<\/code>, \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043d\u043e\u0432\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 <code>a<\/code>\u00a0\u043e\u0442\u043d\u043e\u0441\u0438\u043b\u0441\u044f \u043a \u0442\u0438\u043f\u0443 <code>A<\/code>\u00a0\u0438, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e,\u00a0<code>object<\/code>. \u0422\u0430\u043a\u0438\u043c \u0436\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u0430\u0441\u0441 \u043e\u0442\u00a0<code>type<\/code>\u00a0\u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c\u00a0<code>Meta<\/code>. \u0412\u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043a\u0430\u043a \u0442\u0438\u043f \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445\u00a0<strong>\u043a\u043b\u0430\u0441\u0441\u043e\u0432<\/strong>; \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430\u043c\u0438 \u043e\u0431\u043e\u0438\u0445 \u0442\u0438\u043f\u043e\u0432:\u00a0<code>type<\/code>\u00a0\u0438\u00a0<code>Meta<\/code>.<\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u044d\u0442\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435:<\/p>\n<pre><code class=\"python\">class Meta(type):     def __init__(cls, name, bases, namespace):         super(Meta, cls).__init__(name, bases, namespace)         print(\"Creating new class: {}\".format(cls))              def __call__(cls):         new_instance = super(Meta, cls).__call__()         print(\"Class {} new instance: {}\".format(cls, new_instance))         return new_instance<\/code><\/pre>\n<p>\u042d\u0442\u043e \u043d\u0430\u0448 \u043f\u0435\u0440\u0432\u044b\u0439\u00a0<strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441<\/strong>. \u041c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0435\u0449\u0435 \u0431\u043e\u043b\u0435\u0435 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u044b\u043c, \u043d\u043e \u0445\u043e\u0442\u0435\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0432 \u0438\u0442\u043e\u0433\u0435 \u043e\u043d \u0434\u0435\u043b\u0430\u043b \u0445\u043e\u0442\u044f \u0431\u044b \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435.<\/p>\n<ul>\n<li>\n<p>\u041e\u043d \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434\u00a0<code>__init__<\/code>, \u00a0\u0447\u0442\u043e\u0431\u044b \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u0432\u044b\u0432\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432\u0441\u044f\u043a\u0438\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 <code>Meta<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u041e\u043d \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434\u00a0<code>call<\/code>\u00a0, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0432\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0432\u0441\u044f\u043a\u0438\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 <em>\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 <\/em>\u043a \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0443 \u2013 \u043f\u0438\u0448\u0435\u0442\u00a0<code>variable()<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432 Python \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 \u0438\u043c\u0435\u0435\u0442 \u0442\u0443 \u0436\u0435 \u0444\u043e\u0440\u043c\u0443, \u0447\u0442\u043e \u0438 \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u00a0<code>f<\/code>, \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0435\u0435, \u043c\u044b \u043f\u0438\u0448\u0435\u043c <code>f()<\/code>\u00a0. \u0415\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441 <code>A<\/code>, \u0442\u043e \u043c\u044b \u043f\u0438\u0448\u0435\u043c\u00a0<code>A()<\/code>\u00a0\u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0445\u0443\u043a\u00a0<code>__call__<\/code>.<\/p>\n<p>\u0412\u0441\u0435-\u0442\u0430\u043a\u0438,\u00a0<strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441<\/strong>\u00a0\u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u043d\u0435 \u0442\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f, \u043b\u0438\u0448\u044c \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u0430. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u044d\u0442\u043e \u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u043c:<\/p>\n<pre><code class=\"python\">>>> class C(metaclass=Meta): ...     pass ... Creating new class: &lt;class '__main__.C'> >>> c = C() Class &lt;class '__main__.C'> new instance: &lt;__main__.C object at 0x10e99ae48>  >>> print(c) &lt;__main__.C object at 0x10e99ae48><\/code><\/pre>\n<p>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u0430\u0448 \u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u0437\u0430\u0434\u0443\u043c\u0430\u043d\u043e: \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u0432 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0430\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0441 \u0442\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0443\u0440\u043e\u0432\u043d\u044f\u043c\u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 &#8212;\u00a0<strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u043e\u043c<\/strong>,\u00a0<strong>\u043a\u043b\u0430\u0441\u0441\u043e\u043c<\/strong> \u0438\u00a0<strong>\u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u043c<\/strong>.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u0438\u0448\u0435\u043c\u00a0<code>class C(metaclass=Meta)<\/code>, \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c <code>C<\/code>, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0441\u043e\u0431\u043e\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u00a0<code>Meta<\/code>\u00a0&#8212; \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f\u00a0<code>Meta.init<\/code>, \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435. \u041d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0448\u0430\u0433\u0435 \u043c\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c <code>C()<\/code>\u00a0\u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u043a\u043b\u0430\u0441\u0441\u0430\u00a0<code>C<\/code>, \u0438 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f <code>Meta.__call__<\/code>. \u041d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0448\u0430\u0433\u0435 \u043c\u044b \u0432\u044b\u0432\u0435\u043b\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u00a0<code>c<\/code>, \u0432\u044b\u0437\u044b\u0432\u0430\u044f\u00a0<code>C.__str__<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u0443\u044e \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u0432 \u0431\u0430\u0437\u043e\u0432\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435\u00a0<code>object<\/code>.<\/p>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0441\u0435 \u0442\u0438\u043f\u044b \u043d\u0430\u0448\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445: <\/p>\n<pre><code class=\"python\">>>> print(type(C)) &lt;class '__main__.Meta'> >>> isinstance(C, Meta) True >>> isinstance(C, type) True >>> issubclass(Meta, type) True >>> print(type(c)) &lt;class '__main__.C'> >>> isinstance(c, C) True >>> isinstance(c, object) True >>> issubclass(C, object) True<\/code><\/pre>\n<p>\u0412\u044b\u0448\u0435 \u044f \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u044f\u0433\u043a\u043e\u0435 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0442\u0435\u043c\u0443 <strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u043e\u0432\u00a0<\/strong>\u0438, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0432\u044b \u0443\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0435, \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435, \u0438 \u043a\u0430\u043a \u0438\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u041d\u043e, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u044d\u0442\u043e\u0442 \u0442\u0435\u043a\u0441\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u0431\u044b \u043d\u0435 \u0441\u0442\u043e\u0438\u043b \u0431\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432. \u041a \u043d\u0438\u043c \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c.<\/p>\n<h2>\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440: \u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d<\/h2>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043c\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0441\u043e\u0432\u0441\u0435\u043c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u043c\u0430\u043b\u043e\u0441\u0442\u044c <strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u043e\u0432<\/strong>. \u041c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c &#171;\u044d\u0441\u043a\u0438\u0437&#187; \u0434\u043b\u044f \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u00a0<a href=\"https:\/\/www.piter.com\/collection\/new\/product\/odnostrochniki-python-lakonichnyy-i-soderzhatelnyy-kod\"><em>\u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d<\/em><\/a>\u00a0<a href=\"#666\">[6]<\/a>\u00a0\u00a0\u2013 \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440. <\/p>\n<p>\u0427\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u0431\u0435\u0437 \u0432\u0441\u044f\u043a\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0432 \u043c\u0435\u0442\u043e\u0434\u00a0<code>__new__<\/code>\u00a0\u0432 \u0431\u0430\u0437\u043e\u0432\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435, \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0432\u0435\u0440\u043d\u0443\u043b \u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u043f\u043e\u043c\u043d\u0435\u043d\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440:<\/p>\n<pre><code class=\"python\">class SingletonBase:     instance = None      def __new__(cls, *args, **kwargs):         if cls.instance is None:             cls.instance = super().__new__(cls, *args, **kwargs)          return cls.instance<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0438 \u0432\u0441\u0435. \u041b\u044e\u0431\u043e\u0439 \u043f\u043e\u0434\u043a\u043b\u0430\u0441\u0441, \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043e\u0442\u00a0<code>SingletonBase<\/code>, \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d\u0430.<\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u043e\u0432 \u043e\u043d \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438:<\/p>\n<pre><code class=\"python\">>>> class A(SingletonBase): ...     pass ... >>> class B(A): ...     pass ... >>> print(A()) &lt;__main__.A object at 0x10c8d8710> >>> print(A()) &lt;__main__.A object at 0x10c8d8710> >>> print(B()) &lt;__main__.A object at 0x10c8d8710><\/code><\/pre>\n<p>\u0422\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0437\u0434\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c, \u0432\u0440\u043e\u0434\u0435 \u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u2013 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442. \u041d\u043e \u0435\u0441\u0442\u044c \u0438 \u0442\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u043c \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u043c: \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 <code>B<\/code> \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432 \u043e\u0442\u0432\u0435\u0442 \u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 <code>A<\/code>, \u0447\u0442\u043e \u0438 \u0440\u0430\u043d\u044c\u0448\u0435. <\/p>\n<p>\u042d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c, \u0438 \u043d\u0435 \u043f\u0440\u0438\u0431\u0435\u0433\u0430\u044f \u043d\u0438\u043a\u043e\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043a <strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u0430\u043c<\/strong>, \u043d\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441 \u043d\u0438\u043c\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0435 \u2013 \u0442\u0430\u043a \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u0438\u043c\u0438 \u043d\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f? <\/p>\n<p>\u0423 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 <code>SingletonBaseMeta<\/code>, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u0436\u0434\u044b\u0439 \u0435\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u0430\u0441\u0441 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u043e\u043b\u0435 <code>instance<\/code>\u00a0\u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c\u00a0<code>None<\/code>.<\/p>\n<p>\u0412\u043e\u0442 \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f:<\/p>\n<pre><code class=\"python\">class SingletonMeta(type):     def __init__(cls, name, bases, namespace):         super().__init__(name, bases, namespace)         cls.instance = None      def __call__(cls, *args, **kwargs):         if cls.instance is None:             cls.instance = super().__call__(*args, **kwargs)          return cls.instance   class SingletonBaseMeta(metaclass=SingletonMeta):     pass<\/code><\/pre>\n<p>\u041c\u043e\u0436\u0435\u043c \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c, \u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u0438 \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434:<\/p>\n<pre><code class=\"python\">>>> class A(SingletonBaseMeta): ...     pass ... >>> class B(A): ...     pass ... >>> print(A()) &lt;__main__.A object at 0x1101f6358> >>> print(A()) &lt;__main__.A object at 0x1101f6358> >>> print(B()) &lt;__main__.B object at 0x1101f6eb8><\/code><\/pre>\n<p>\u041f\u043e\u0437\u0434\u0440\u0430\u0432\u043b\u044f\u0435\u043c, \u043f\u043e-\u0432\u0438\u0434\u0438\u043c\u043e\u043c\u0443 \u043d\u0430\u0448\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430-\u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a, \u043a\u0430\u043a \u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c!<\/p>\n<p>\u041d\u0430 \u043f\u0440\u0430\u0432\u0430\u0445 \u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441 <em>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438<\/em>, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u043c\u0430\u0445\u043d\u0435\u043c\u0441\u044f \u043d\u0430 \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u0441\u043b\u043e\u0436\u043d\u0435\u0435.<\/p>\n<h2>\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440: \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u043e\u0435 ORM<\/h2>\n<p>\u041a\u0430\u043a \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u0448\u0435, \u0441 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u043c <em>\u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d<\/em>\u00a0\u043c\u043e\u0436\u043d\u043e \u043a\u0440\u0430\u0441\u0438\u0432\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u0441\u043b\u0435\u0433\u043a\u0430 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0438\u0441\u044c <strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438<\/strong>, \u043d\u043e \u043e\u0441\u0442\u0440\u043e\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u043d\u0438\u0445 \u043d\u0435\u0442. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 <strong>\u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u044b<\/strong>\u00a0\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-397013","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/397013","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=397013"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/397013\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=397013"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=397013"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=397013"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}