{"id":18860,"date":"2025-03-21T00:17:20","date_gmt":"2025-03-20T20:47:20","guid":{"rendered":"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/"},"modified":"2025-03-21T00:17:20","modified_gmt":"2025-03-20T20:47:20","slug":"%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af","status":"publish","type":"post","link":"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/","title":{"rendered":"\u0686\u06af\u0648\u0646\u0647 \u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u067e\u0627\u06cc\u062a\u0648\u0646 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u0646\u062f: \u06cc\u06a9 \u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u0639\u0645\u0644\u06cc"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\"><p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0633\u0631\u0641\u0635\u0644\u0647\u0627\u06cc \u0645\u0637\u0644\u0628<\/p>\n<\/div><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d9%be%db%8c%d8%b4_%d9%86%db%8c%d8%a7%d8%b2%d9%87%d8%a7%db%8c\" >\u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632\u0647\u0627\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d9%81%d9%87%d8%b1%d8%b3%d8%aa_%d9%85%d8%b7%d8%a7%d9%84%d8%a8\" >\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c_%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c_%da%86%db%8c%d8%b3%d8%aa%d8%9f\" >\u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u0686\u06cc\u0633\u062a\u061f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d9%86%d9%85%d8%a7%db%8c%d9%86%d8%af%da%af%db%8c_%d8%b4%db%8c%d8%a1\" >\u0646\u0645\u0627\u06cc\u0646\u062f\u06af\u06cc \u0634\u06cc\u0621<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#str_vs_rep\" >str vs rep<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d9%85%d8%ab%d8%a7%d9%84_%d8%b9%d9%85%d9%84%db%8c_%da%a9%d9%84%d8%a7%d8%b3_%d8%ae%d8%b7%d8%a7%db%8c_%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c\" >\u0645\u062b\u0627\u0644 \u0639\u0645\u0644\u06cc: \u06a9\u0644\u0627\u0633 \u062e\u0637\u0627\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d8%a7%d8%b6%d8%a7%d9%81%d9%87_%d8%a8%d8%a7%d8%b1_%d8%a7%d9%be%d8%b1%d8%a7%d8%aa%d9%88%d8%b1\" >\u0627\u0636\u0627\u0641\u0647 \u0628\u0627\u0631 \u0627\u067e\u0631\u0627\u062a\u0648\u0631<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d8%a7%d9%be%d8%b1%d8%a7%d8%aa%d9%88%d8%b1%d9%87%d8%a7%db%8c_%d8%ad%d8%b3%d8%a7%d8%a8%db%8c\" >\u0627\u067e\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u062d\u0633\u0627\u0628\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d8%a7%d9%be%d8%b1%d8%a7%d8%aa%d9%88%d8%b1%d9%87%d8%a7%db%8c_%d9%85%d9%82%d8%a7%db%8c%d8%b3%d9%87\" >\u0627\u067e\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u0645\u0642\u0627\u06cc\u0633\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d9%85%d8%ab%d8%a7%d9%84_%d8%b9%d9%85%d9%84%db%8c_%da%a9%d9%84%d8%a7%d8%b3_%d9%be%d9%88%d9%84\" >\u0645\u062b\u0627\u0644 \u0639\u0645\u0644\u06cc: \u06a9\u0644\u0627\u0633 \u067e\u0648\u0644<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#container_%d8%b1%d9%88%d8%b4\" >Container  \u0631\u0648\u0634<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d9%be%d8%b1%d9%88%d8%aa%da%a9%d9%84_%d8%aa%d9%88%d8%a7%d9%84%db%8c\" >\u067e\u0631\u0648\u062a\u06a9\u0644 \u062a\u0648\u0627\u0644\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d9%be%d8%b1%d9%88%d8%aa%da%a9%d9%84_%d9%86%d9%82%d8%b4%d9%87_%d8%a8%d8%b1%d8%af%d8%a7%d8%b1%db%8c\" >\u067e\u0631\u0648\u062a\u06a9\u0644 \u0646\u0642\u0634\u0647 \u0628\u0631\u062f\u0627\u0631\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d9%85%d8%ab%d8%a7%d9%84_%d8%b9%d9%85%d9%84%db%8c_%d8%ad%d8%a7%d9%81%d8%b8%d9%87_%d9%be%d9%86%d9%87%d8%a7%d9%86_%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c\" >\u0645\u062b\u0627\u0644 \u0639\u0645\u0644\u06cc: \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 \u0633\u0641\u0627\u0631\u0634\u06cc<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d8%af%d8%b3%d8%aa%d8%b1%d8%b3%db%8c_%d9%88%db%8c%da%98%da%af%db%8c\" >\u062f\u0633\u062a\u0631\u0633\u06cc \u0648\u06cc\u0698\u06af\u06cc<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#getattr_%d9%88_getattribute\" >getAttr \u0648 getAttribute<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#setattr_%d9%88_delattr\" >SetATTR \u0648 Delattr<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d9%85%d8%ab%d8%a7%d9%84_%d8%b9%d9%85%d9%84%db%8c_%d8%ae%d8%b5%d9%88%d8%b5%db%8c%d8%a7%d8%aa_%d8%a7%d8%aa%d8%b5%d8%a7%d9%84_%d8%ae%d9%88%d8%af%da%a9%d8%a7%d8%b1\" >\u0645\u062b\u0627\u0644 \u0639\u0645\u0644\u06cc: \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u0627\u062a\u0635\u0627\u0644 \u062e\u0648\u062f\u06a9\u0627\u0631<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d9%85%d8%af%db%8c%d8%b1%d8%a7%d9%86_%d9%85%d8%aa%d9%86\" >\u0645\u062f\u06cc\u0631\u0627\u0646 \u0645\u062a\u0646<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d9%88%d8%a7%d8%b1%d8%af_%d9%88_%d8%ae%d8%b1%d9%88%d8%ac_%d8%b4%d9%88%db%8c%d8%af\" >\u0648\u0627\u0631\u062f \u0648 \u062e\u0631\u0648\u062c \u0634\u0648\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d9%85%d8%ab%d8%a7%d9%84_%d8%b9%d9%85%d9%84%db%8c_%d9%85%d8%af%db%8c%d8%b1_%d8%a7%d8%aa%d8%b5%d8%a7%d9%84_%d9%be%d8%a7%db%8c%da%af%d8%a7%d9%87_%d8%af%d8%a7%d8%af%d9%87\" >\u0645\u062b\u0627\u0644 \u0639\u0645\u0644\u06cc: \u0645\u062f\u06cc\u0631 \u0627\u062a\u0635\u0627\u0644 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d8%a7%d8%b4%db%8c%d8%a7%d8%a1_%d9%82%d8%a7%d8%a8%d9%84_%d8%aa%d9%85%d8%a7%d8%b3\" >\u0627\u0634\u06cc\u0627\u0621 \u0642\u0627\u0628\u0644 \u062a\u0645\u0627\u0633<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d9%81%d8%b1%d8%a7%d8%ae%d9%88%d8%a7%d9%86%db%8c\" >\u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d9%85%d8%ab%d8%a7%d9%84_%d8%b9%d9%85%d9%84%db%8c_%d8%af%da%a9%d9%88%d8%b1%d8%a7%d8%aa%d9%88%d8%b1_%db%8c%d8%a7%d8%af%d8%a2%d9%88%d8%b1%db%8c\" >\u0645\u062b\u0627\u0644 \u0639\u0645\u0644\u06cc: \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631 \u06cc\u0627\u062f\u0622\u0648\u0631\u06cc<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c_%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c_%d9%be%db%8c%d8%b4%d8%b1%d9%81%d8%aa%d9%87\" >\u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u067e\u06cc\u0634\u0631\u0641\u062a\u0647<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d8%ac%d8%af%db%8c%d8%af_%d8%a8%d8%b1%d8%a7%db%8c_%d8%a7%db%8c%d8%ac%d8%a7%d8%af_%d8%b4%db%8c%d8%a1\" >\u062c\u062f\u06cc\u062f \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0634\u06cc\u0621<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d8%a7%d8%b3%d9%84%d8%a7%d8%aa_%d8%a8%d8%b1%d8%a7%db%8c_%d8%a8%d9%87%db%8c%d9%86%d9%87_%d8%b3%d8%a7%d8%b2%db%8c_%d8%ad%d8%a7%d9%81%d8%b8%d9%87\" >\u0627\u0633\u0644\u0627\u062a \u0628\u0631\u0627\u06cc \u0628\u0647\u06cc\u0646\u0647 \u0633\u0627\u0632\u06cc \u062d\u0627\u0641\u0638\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-28\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d8%a8%d8%b1%d8%a7%db%8c_%d9%85%d9%82%d8%a7%d8%af%db%8c%d8%b1_%d9%81%d8%b1%d9%87%d9%86%da%af_%d9%84%d8%ba%d8%aa_%d9%be%db%8c%d8%b4_%d9%81%d8%b1%d8%b6_%d9%88%d8%ac%d9%88%d8%af_%d9%86%d8%af%d8%a7%d8%b1%d8%af\" >\u0628\u0631\u0627\u06cc \u0645\u0642\u0627\u062f\u06cc\u0631 \u0641\u0631\u0647\u0646\u06af \u0644\u063a\u062a \u067e\u06cc\u0634 \u0641\u0631\u0636 \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d9%85%d9%84%d8%a7%d8%ad%d8%b8%d8%a7%d8%aa_%d8%b9%d9%85%d9%84%da%a9%d8%b1%d8%af\" >\u0645\u0644\u0627\u062d\u0638\u0627\u062a \u0639\u0645\u0644\u06a9\u0631\u062f<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-30\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d8%aa%d8%a3%d8%ab%db%8c%d8%b1_%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c_%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c_%d8%b1%d9%88%db%8c_%d8%b9%d9%85%d9%84\" >\u062a\u0623\u062b\u06cc\u0631 \u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u0631\u0648\u06cc \u0639\u0645\u0644<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-31\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d8%a7%d8%b3%d8%aa%d8%b1%d8%a7%d8%aa%da%98%db%8c_%d9%87%d8%a7%db%8c_%d8%a8%d9%87%db%8c%d9%86%d9%87_%d8%b3%d8%a7%d8%b2%db%8c\" >\u0627\u0633\u062a\u0631\u0627\u062a\u0698\u06cc \u0647\u0627\u06cc \u0628\u0647\u06cc\u0646\u0647 \u0633\u0627\u0632\u06cc<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-32\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d8%a8%d9%87%d8%aa%d8%b1%db%8c%d9%86_%d8%b1%d9%88%d8%b4%d9%87%d8%a7\" >\u0628\u0647\u062a\u0631\u06cc\u0646 \u0631\u0648\u0634\u0647\u0627<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-33\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#1_%d8%b3%d8%a7%d8%b2%da%af%d8%a7%d8%b1_%d8%a8%d8%a7%d8%b4%db%8c%d8%af\" >1. \u0633\u0627\u0632\u06af\u0627\u0631 \u0628\u0627\u0634\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-34\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#2_%d8%a8%d8%a7%d8%b2%da%af%d8%b1%d8%af%d8%a7%d9%86%d8%af%d9%86_%db%8c%d8%a7%d8%af%d8%af%d8%a7%d8%b4%d8%aa\" >2. \u0628\u0627\u0632\u06af\u0631\u062f\u0627\u0646\u062f\u0646 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-35\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#3_%d8%a2%d9%86_%d8%b1%d8%a7_%d8%b3%d8%a7%d8%af%d9%87_%d9%86%da%af%d9%87_%d8%af%d8%a7%d8%b1%db%8c%d8%af\" >3. \u0622\u0646 \u0631\u0627 \u0633\u0627\u062f\u0647 \u0646\u06af\u0647 \u062f\u0627\u0631\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-36\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#4_%d8%b1%d9%81%d8%aa%d8%a7%d8%b1_%d8%a7%d8%b3%d9%86%d8%a7%d8%af\" >4. \u0631\u0641\u062a\u0627\u0631 \u0627\u0633\u0646\u0627\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-37\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#5_%d8%b9%d9%85%d9%84%da%a9%d8%b1%d8%af_%d8%b1%d8%a7_%d8%af%d8%b1_%d9%86%d8%b8%d8%b1_%d8%a8%da%af%db%8c%d8%b1%db%8c%d8%af\" >5. \u0639\u0645\u0644\u06a9\u0631\u062f \u0631\u0627 \u062f\u0631 \u0646\u0638\u0631 \u0628\u06af\u06cc\u0631\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-38\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#6_%d9%85%d9%88%d8%a7%d8%b1%d8%af_%d9%84%d8%a8%d9%87_%d8%af%d8%b3%d8%aa%d9%87\" >6. \u0645\u0648\u0627\u0631\u062f \u0644\u0628\u0647 \u062f\u0633\u062a\u0647<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-39\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d9%be%db%8c%da%86%db%8c%d8%af%d9%86\" >\u067e\u06cc\u0686\u06cc\u062f\u0646<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-40\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d8%ba%d8%b0%d8%a7%db%8c_%d8%a7%d8%b5%d9%84%db%8c\" >\u063a\u0630\u0627\u06cc \u0627\u0635\u0644\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-41\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%da%86%d9%87_%d9%85%d9%88%d9%82%d8%b9_%d8%a7%d8%b2_%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c_%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c_%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87_%da%a9%d9%86%db%8c%d8%af\" >\u0686\u0647 \u0645\u0648\u0642\u0639 \u0627\u0632 \u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-42\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%da%86%d9%87_%d9%85%d9%88%d9%82%d8%b9_%d8%a8%d8%a7%db%8c%d8%af_%d8%a7%d8%b2_%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c_%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c_%d8%ac%d9%84%d9%88%da%af%db%8c%d8%b1%db%8c_%da%a9%d9%86%db%8c%d9%85\" >\u0686\u0647 \u0645\u0648\u0642\u0639 \u0628\u0627\u06cc\u062f \u0627\u0632 \u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u06a9\u0646\u06cc\u0645<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-43\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d9%85%d9%86%d8%a7%d8%a8%d8%b9_%d9%88_%d8%ae%d9%88%d8%a7%d9%86%d8%af%d9%86_%d8%a8%db%8c%d8%b4%d8%aa%d8%b1\" >\u0645\u0646\u0627\u0628\u0639 \u0648 \u062e\u0648\u0627\u0646\u062f\u0646 \u0628\u06cc\u0634\u062a\u0631<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-44\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d9%be%db%8c%d8%aa%d9%88%d9%86_%d8%b1%d8%b3%d9%85%db%8c_documentation\" >\u067e\u06cc\u062a\u0648\u0646 \u0631\u0633\u0645\u06cc Documentation<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-45\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d9%85%d9%86%d8%a7%d8%a8%d8%b9_%d8%ac%d8%a7%d9%85%d8%b9%d9%87\" >\u0645\u0646\u0627\u0628\u0639 \u062c\u0627\u0645\u0639\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-46\" href=\"https:\/\/rasanegaar.com\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c-%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%a9%d8%a7%d8%b1-%d9%85%db%8c-%da%a9%d9%86%d9%86%d8%af\/#%d8%ae%d9%88%d8%a7%d9%86%d8%af%d9%86_%d8%a8%db%8c%d8%b4%d8%aa%d8%b1\" >\u062e\u0648\u0627\u0646\u062f\u0646 \u0628\u06cc\u0634\u062a\u0631<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">\u0632\u0645\u0627\u0646 \u0644\u0627\u0632\u0645 \u0628\u0631\u0627\u06cc \u0645\u0637\u0627\u0644\u0639\u0647: <\/span> <span class=\"rt-time\"> 21<\/span> <span class=\"rt-label rt-postfix\">\u062f\u0642\u06cc\u0642\u0647<\/span><\/span><p> <br \/>\n<\/p>\n<section class=\"post-content \" data-test-label=\"post-content\">\n<p>\u0622\u06cc\u0627 \u062a\u0627 \u0628\u0647 \u062d\u0627\u0644 \u0641\u06a9\u0631 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u067e\u0627\u06cc\u062a\u0648\u0646 \u0628\u0627\u0639\u062b \u0645\u06cc \u0634\u0648\u062f \u0627\u0634\u06cc\u0627\u0621 \u0628\u0627 \u0627\u067e\u0631\u0627\u062a\u0648\u0631\u0647\u0627 \u0645\u0627\u0646\u0646\u062f \u06a9\u0627\u0631 \u06a9\u0646\u0646\u062f <code>+<\/code> \u06cc\u0627 <code>-<\/code>\u061f \u06cc\u0627 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062f\u0627\u0646\u062f \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0634\u06cc\u0627\u0621 \u0631\u0627 \u062f\u0631 \u0647\u0646\u06af\u0627\u0645 \u0634\u0645\u0627 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0647\u06cc\u062f print \u0622\u0646\u0647\u0627\u061f \u067e\u0627\u0633\u062e \u062f\u0631 \u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u067e\u0627\u06cc\u062a\u0648\u0646 \u060c \u06a9\u0647 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 Dunder \u0646\u06cc\u0632 \u0634\u0646\u0627\u062e\u062a\u0647 \u0645\u06cc \u0634\u0648\u062f \u0646\u0647\u0641\u062a\u0647 \u0627\u0633\u062a (D<s>\u0627\u0648\u062c<\/s> \u0632\u06cc\u0631) \u0631\u0648\u0634\u0647\u0627.<\/p>\n<p>\u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u0631\u0648\u0634\u0647\u0627\u06cc \u0648\u06cc\u0698\u0647 \u0627\u06cc \u0647\u0633\u062a\u0646\u062f \u06a9\u0647 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u0646\u062f \u0631\u0648\u0634 \u0631\u0641\u062a\u0627\u0631 \u0627\u0634\u06cc\u0627\u0621 \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u067e\u0627\u0633\u062e \u0628\u0647 \u0639\u0645\u0644\u06cc\u0627\u062a \u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0648 \u062a\u0648\u0627\u0628\u0639 \u062f\u0627\u062e\u0644\u06cc \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f. \u0622\u0646\u0647\u0627 \u0686\u06cc\u0632\u06cc \u0647\u0633\u062a\u0646\u062f \u06a9\u0647 \u0628\u0627\u0639\u062b \u0645\u06cc \u0634\u0648\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0634\u06cc \u06af\u0631\u0627 \u067e\u0627\u06cc\u062a\u0648\u0646 \u0628\u0633\u06cc\u0627\u0631 \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0648 \u0634\u0647\u0648\u062f\u06cc \u0628\u0627\u0634\u062f.<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627 \u060c \u06cc\u0627\u062f \u0645\u06cc \u06af\u06cc\u0631\u06cc\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0627\u0632 \u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u062f \u0638\u0631\u06cc\u0641 \u062a\u0631 \u0648 \u0642\u062f\u0631\u062a\u0645\u0646\u062f\u062a\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f. \u0645\u062b\u0627\u0644\u0647\u0627\u06cc \u0639\u0645\u0644\u06cc \u0631\u0627 \u0645\u0634\u0627\u0647\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u062f \u06a9\u0631\u062f \u06a9\u0647 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0686\u06af\u0648\u0646\u0647 \u0627\u06cc\u0646 \u0631\u0648\u0634 \u0647\u0627 \u062f\u0631 \u0633\u0646\u0627\u0631\u06cc\u0648\u0647\u0627\u06cc \u062f\u0646\u06cc\u0627\u06cc \u0648\u0627\u0642\u0639\u06cc \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u0646\u062f.<\/p>\n<h2 id=\"heading-prerequisites\"><span class=\"ez-toc-section\" id=\"%d9%be%db%8c%d8%b4_%d9%86%db%8c%d8%a7%d8%b2%d9%87%d8%a7%db%8c\"><\/span>\u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632\u0647\u0627\u06cc<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li>\n<p>\u062f\u0631\u06a9 \u0627\u0633\u0627\u0633\u06cc \u0627\u0632 \u0646\u062d\u0648 \u067e\u0627\u06cc\u062a\u0648\u0646 \u0648 \u0645\u0641\u0627\u0647\u06cc\u0645 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0634\u06cc \u06af\u0631\u0627.<\/p>\n<\/li>\n<li>\n<p>\u0622\u0634\u0646\u0627\u06cc\u06cc \u0628\u0627 \u06a9\u0644\u0627\u0633 \u0647\u0627 \u060c \u0627\u0634\u06cc\u0627\u0621 \u0648 \u0648\u0631\u0627\u062b\u062a.<\/p>\n<\/li>\n<li>\n<p>\u062f\u0627\u0646\u0634 \u0627\u0646\u0648\u0627\u0639 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u062f\u0627\u062e\u0644\u06cc \u067e\u0627\u06cc\u062a\u0648\u0646 (\u0644\u06cc\u0633\u062a \u0647\u0627 \u060c \u0641\u0631\u0647\u0646\u06af \u0644\u063a\u062a \u0647\u0627 \u0648 \u063a\u06cc\u0631\u0647 \u0631\u0648\u06cc).<\/p>\n<\/li>\n<li>\n<p>\u0646\u0635\u0628 \u067e\u0627\u06cc\u062a\u0648\u0646 3 \u06a9\u0627\u0631 \u0628\u0631\u0627\u06cc \u0645\u0634\u0627\u0631\u06a9\u062a \u0641\u0639\u0627\u0644 \u0628\u0627 \u0646\u0645\u0648\u0646\u0647 \u0647\u0627\u06cc \u0627\u06cc\u0646\u062c\u0627 \u062a\u0648\u0635\u06cc\u0647 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<\/li>\n<\/ul>\n<h2 id=\"heading-table-of-contents\"><span class=\"ez-toc-section\" id=\"%d9%81%d9%87%d8%b1%d8%b3%d8%aa_%d9%85%d8%b7%d8%a7%d9%84%d8%a8\"><\/span><strong>\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ol>\n<li>\n<p>\u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u0686\u06cc\u0633\u062a\u061f<\/p>\n<\/li>\n<li>\n<p>\u0646\u0645\u0627\u06cc\u0646\u062f\u06af\u06cc \u0634\u06cc\u0621<\/p>\n<ul>\n<li>\n<p><strong>str<\/strong> \u062f\u0631 \u0645\u0642\u0627\u0628\u0644 <strong>\u0645\u062c\u062f\u062f\u0627\u064b<\/strong><\/p>\n<\/li>\n<li>\n<p>\u0645\u062b\u0627\u0644 \u0639\u0645\u0644\u06cc: \u06a9\u0644\u0627\u0633 \u062e\u0637\u0627\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0627\u0636\u0627\u0641\u0647 \u0628\u0627\u0631 \u0627\u067e\u0631\u0627\u062a\u0648\u0631<\/p>\n<ul>\n<li>\n<p>\u0627\u067e\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u062d\u0633\u0627\u0628\u06cc<\/p>\n<\/li>\n<li>\n<p>\u0627\u067e\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u0645\u0642\u0627\u06cc\u0633\u0647<\/p>\n<\/li>\n<li>\n<p>\u0645\u062b\u0627\u0644 \u0639\u0645\u0644\u06cc: \u06a9\u0644\u0627\u0633 \u067e\u0648\u0644<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Container  \u0631\u0648\u0634<\/p>\n<ul>\n<li>\n<p>\u067e\u0631\u0648\u062a\u06a9\u0644 \u062a\u0648\u0627\u0644\u06cc<\/p>\n<\/li>\n<li>\n<p>\u067e\u0631\u0648\u062a\u06a9\u0644 \u0646\u0642\u0634\u0647 \u0628\u0631\u062f\u0627\u0631\u06cc<\/p>\n<\/li>\n<li>\n<p>\u0645\u062b\u0627\u0644 \u0639\u0645\u0644\u06cc: \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 \u0633\u0641\u0627\u0631\u0634\u06cc<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u062f\u0633\u062a\u0631\u0633\u06cc \u0648\u06cc\u0698\u06af\u06cc<\/p>\n<ul>\n<li>\n<p><strong>\u0628\u0627\u06a9\u062a\u0631\u06cc<\/strong> \u0648\u062a <strong>GetAttribute<\/strong><\/p>\n<\/li>\n<li>\n<p><strong>\u0645\u062a\u0635\u062f\u06cc<\/strong> \u0648\u062a <strong>\u062f\u0644\u0647\u0631\u0647<\/strong><\/p>\n<\/li>\n<li>\n<p>\u0645\u062b\u0627\u0644 \u0639\u0645\u0644\u06cc: \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u0627\u062a\u0635\u0627\u0644 \u062e\u0648\u062f\u06a9\u0627\u0631<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0645\u062f\u06cc\u0631\u0627\u0646 \u0645\u062a\u0646<\/p>\n<ul>\n<li>\n<p><strong>\u0648\u0627\u0631\u062f \u06a9\u0631\u062f\u0646<\/strong> \u0648\u062a <strong>\u062e\u0631\u0648\u062c<\/strong><\/p>\n<\/li>\n<li>\n<p>\u0645\u062b\u0627\u0644 \u0639\u0645\u0644\u06cc: \u0645\u062f\u06cc\u0631 \u0627\u062a\u0635\u0627\u0644 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0627\u0634\u06cc\u0627\u0621 \u0642\u0627\u0628\u0644 \u062a\u0645\u0627\u0633<\/p>\n<ul>\n<li>\n<p><strong>\u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc<\/strong><\/p>\n<\/li>\n<li>\n<p>\u0645\u062b\u0627\u0644 \u0639\u0645\u0644\u06cc: \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631 \u06cc\u0627\u062f\u0622\u0648\u0631\u06cc<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u067e\u06cc\u0634\u0631\u0641\u062a\u0647<\/p>\n<ul>\n<li>\n<p><strong>\u062c\u062f\u06cc\u062f<\/strong> \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0634\u06cc\u0621<\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u0633\u0644\u0627\u062a<\/strong> \u0628\u0631\u0627\u06cc \u0628\u0647\u06cc\u0646\u0647 \u0633\u0627\u0632\u06cc \u062d\u0627\u0641\u0638\u0647<\/p>\n<\/li>\n<li>\n<p><strong>\u0645\u0641\u0642\u0648\u062f<\/strong> \u0628\u0631\u0627\u06cc \u0645\u0642\u0627\u062f\u06cc\u0631 \u0641\u0631\u0647\u0646\u06af \u0644\u063a\u062a \u067e\u06cc\u0634 \u0641\u0631\u0636<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0645\u0644\u0627\u062d\u0638\u0627\u062a \u0639\u0645\u0644\u06a9\u0631\u062f<\/p>\n<\/li>\n<li>\n<p>\u0628\u0647\u062a\u0631\u06cc\u0646 \u0631\u0648\u0634\u0647\u0627<\/p>\n<\/li>\n<li>\n<p>\u067e\u06cc\u0686\u06cc\u062f\u0646<\/p>\n<\/li>\n<li>\n<p>\u0645\u0646\u0627\u0628\u0639<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"heading-what-are-magic-methods\"><span class=\"ez-toc-section\" id=\"%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c_%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c_%da%86%db%8c%d8%b3%d8%aa%d8%9f\"><\/span><strong>\u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u0686\u06cc\u0633\u062a\u061f<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u062f\u0631 \u067e\u0627\u06cc\u062a\u0648\u0646 \u0631\u0648\u0634\u0647\u0627\u06cc \u0648\u06cc\u0698\u0647 \u0627\u06cc \u0647\u0633\u062a\u0646\u062f \u06a9\u0647 \u0628\u0627 \u0632\u06cc\u0631\u0628\u0646\u0627\u0647\u0627\u06cc \u0645\u0636\u0627\u0639\u0641 \u0634\u0631\u0648\u0639 \u0648 \u067e\u0627\u06cc\u0627\u0646 \u0645\u06cc \u06cc\u0627\u0628\u0646\u062f (<code>__<\/code>). \u0648\u0642\u062a\u06cc \u0627\u0632 \u0639\u0645\u0644\u06cc\u0627\u062a \u06cc\u0627 \u06a9\u0627\u0631\u06a9\u0631\u062f\u0647\u0627\u06cc \u062e\u0627\u0635\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u062f \u0631\u0648\u06cc \u0627\u0634\u06cc\u0627\u0621 \u0634\u0645\u0627 \u060c \u067e\u0627\u06cc\u062a\u0648\u0646 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0627\u06cc\u0646 \u0631\u0648\u0634 \u0647\u0627 \u0631\u0627 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644 \u060c \u0647\u0646\u06af\u0627\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <code>+<\/code> \u0639\u0645\u0644\u06af\u0631 \u0631\u0648\u06cc \u062f\u0648 \u0634\u06cc \u060c \u067e\u0627\u06cc\u062a\u0648\u0646 \u0628\u0647 \u062f\u0646\u0628\u0627\u0644 <code>__add__<\/code> \u0631\u0648\u0634 \u062f\u0631 \u0639\u0645\u0644 \u0633\u0645\u062a \u0686\u067e. \u0627\u06af\u0631 \u0622\u0646 \u0631\u0627 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u062f \u060c \u0622\u0646 \u0631\u0648\u0634 \u0631\u0627 \u0628\u0627 \u0639\u0645\u0644 \u0635\u062d\u06cc\u062d \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u0645\u06cc \u0646\u0627\u0645\u062f.<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9 \u0645\u062b\u0627\u0644 \u0633\u0627\u062f\u0647 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u06a9\u0647 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0686\u06af\u0648\u0646\u0647 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f:<\/p>\n<pre><code class=\"lang-python\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Point<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span>(<span class=\"hljs-params\">self, x, y<\/span>):<\/span>\n        self.x = x\n        self.y = y\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__add__<\/span>(<span class=\"hljs-params\">self, other<\/span>):<\/span>\n        <span class=\"hljs-keyword\">return<\/span> Point(self.x + other.x, self.y + other.y)\n\np1 = Point(<span class=\"hljs-number\">1<\/span>, <span class=\"hljs-number\">2<\/span>)\np2 = Point(<span class=\"hljs-number\">3<\/span>, <span class=\"hljs-number\">4<\/span>)\np3 = p1 + p2  <span class=\"hljs-comment\"># This calls p1.__add__(p2)<\/span>\nprint(p3.x, p3.y)  <span class=\"hljs-comment\"># Output: 4 6<\/span>\n<\/code><\/pre>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0622\u0646\u0686\u0647 \u0631\u0627 \u06a9\u0647 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0627\u062a\u0641\u0627\u0642 \u0645\u06cc \u0627\u0641\u062a\u062f \u062a\u062c\u0632\u06cc\u0647 \u06a9\u0646\u06cc\u0645:<\/p>\n<ol>\n<li>\n<p>\u0645\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 <code>Point<\/code> \u06a9\u0644\u0627\u0633 \u06a9\u0647 \u0646\u0634\u0627\u0646 \u062f\u0647\u0646\u062f\u0647 \u06cc\u06a9 \u0646\u0642\u0637\u0647 \u062f\u0631 \u0641\u0636\u0627\u06cc 2D \u0627\u0633\u062a<\/p>\n<\/li>\n<li>\n<p>\u062f\u0631 <code>__init__<\/code> \u0631\u0648\u0634 \u0645\u062e\u062a\u0635\u0627\u062a x \u0648 y \u0631\u0627 \u0622\u063a\u0627\u0632 \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<li>\n<p>\u062f\u0631 <code>__add__<\/code> \u0631\u0648\u0634 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0648\u0642\u062a\u06cc \u062f\u0648 \u0627\u0645\u062a\u06cc\u0627\u0632 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0686\u0647 \u0627\u062a\u0641\u0627\u0642\u06cc \u0645\u06cc \u0627\u0641\u062a\u062f<\/p>\n<\/li>\n<li>\n<p>\u0648\u0642\u062a\u06cc \u0645\u06cc \u0646\u0648\u06cc\u0633\u06cc\u0645 <code>p1 + p2<\/code>\u060c \u067e\u0627\u06cc\u062a\u0648\u0646 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u062a\u0645\u0627\u0633 \u0645\u06cc \u06af\u06cc\u0631\u062f <code>p1.__add__(p2)<\/code><\/p>\n<\/li>\n<li>\n<p>\u0646\u062a\u06cc\u062c\u0647 \u062c\u062f\u06cc\u062f \u0627\u0633\u062a <code>Point<\/code> \u0628\u0627 \u0645\u062e\u062a\u0635\u0627\u062a (4 \u060c 6)<\/p>\n<\/li>\n<\/ol>\n<p>\u0627\u06cc\u0646 \u0641\u0642\u0637 \u0622\u063a\u0627\u0632 \u0627\u0633\u062a. \u067e\u0627\u06cc\u062a\u0648\u0646 \u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u0632\u06cc\u0627\u062f\u06cc \u062f\u0627\u0631\u062f \u06a9\u0647 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0631\u0648\u0634 \u0631\u0641\u062a\u0627\u0631 \u0627\u0634\u06cc\u0627\u0621 \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u0645\u0648\u0642\u0639\u06cc\u062a \u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f. \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0631\u062e\u06cc \u0627\u0632 \u0645\u0641\u06cc\u062f\u062a\u0631\u06cc\u0646 \u0622\u0646\u0647\u0627 \u0631\u0627 \u06a9\u0634\u0641 \u06a9\u0646\u06cc\u0645.<\/p>\n<h2 id=\"heading-object-representation\"><span class=\"ez-toc-section\" id=\"%d9%86%d9%85%d8%a7%db%8c%d9%86%d8%af%da%af%db%8c_%d8%b4%db%8c%d8%a1\"><\/span><strong>\u0646\u0645\u0627\u06cc\u0646\u062f\u06af\u06cc \u0634\u06cc\u0621<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u0628\u0627 \u0627\u0634\u06cc\u0627\u0621 \u062f\u0631 \u067e\u0627\u06cc\u062a\u0648\u0646 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u06cc\u062f \u060c \u0627\u063a\u0644\u0628 \u0628\u0627\u06cc\u062f \u0622\u0646\u0647\u0627 \u0631\u0627 \u0628\u0647 \u0631\u0634\u062a\u0647 \u0647\u0627 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0646\u06cc\u062f. \u0627\u06cc\u0646 \u0627\u062a\u0641\u0627\u0642 \u0645\u06cc \u0627\u0641\u062a\u062f \u0648\u0642\u062a\u06cc \u0634\u0645\u0627 print \u06cc\u06a9 \u0634\u06cc\u0621 \u06cc\u0627 \u0633\u0639\u06cc \u06a9\u0646\u06cc\u062f \u0622\u0646 \u0631\u0627 \u062f\u0631 \u062a\u0639\u0627\u0645\u0644\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062f\u0647\u06cc\u062f console\u0628\u0634\u0631 \u067e\u0627\u06cc\u062a\u0648\u0646 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0645\u0646\u0638\u0648\u0631 \u062f\u0648 \u0631\u0648\u0634 \u062c\u0627\u062f\u0648\u06cc\u06cc \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f: <code>__str__<\/code> \u0648\u062a <code>__repr__<\/code>\u0628\u0634\u0631<\/p>\n<h3 id=\"heading-str-vs-repr\"><span class=\"ez-toc-section\" id=\"str_vs_rep\"><\/span><strong>str vs rep<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u062f\u0631 <code>__str__<\/code> \u0648\u062a <code>__repr__<\/code> \u0631\u0648\u0634\u0647\u0627 \u0627\u0647\u062f\u0627\u0641 \u0645\u062e\u062a\u0644\u0641\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u0646\u062f:<\/p>\n<ul>\n<li>\n<p><code>__str__<\/code>: \u062a\u0648\u0633\u0637 <code>str()<\/code> \u0639\u0645\u0644\u06a9\u0631\u062f \u0648 \u062a\u0648\u0633\u0637 <code>print()<\/code> \u0639\u0645\u0644\u06a9\u0631\u062f. \u0627\u06cc\u0646 \u0628\u0627\u06cc\u062f \u0631\u0634\u062a\u0647 \u0627\u06cc \u0631\u0627 \u06a9\u0647 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0646\u0647\u0627\u06cc\u06cc \u0642\u0627\u0628\u0644 \u062e\u0648\u0627\u0646\u062f\u0646 \u0627\u0633\u062a \u060c \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u062f.<\/p>\n<\/li>\n<li>\n<p><code>__repr__<\/code>: \u062a\u0648\u0633\u0637 <code>repr()<\/code> \u0639\u0645\u0644\u06a9\u0631\u062f \u0648 \u062f\u0631 \u062a\u0639\u0627\u0645\u0644\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f console\u0628\u0634\u0631 \u0627\u06cc\u0646 \u0628\u0627\u06cc\u062f \u0631\u0634\u062a\u0647 \u0627\u06cc \u0631\u0627 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u062f \u06a9\u0647 \u062f\u0631 \u062d\u0627\u0644\u062a \u0627\u06cc\u062f\u0647 \u0622\u0644 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0631\u0627\u06cc \u0628\u0627\u0632\u0622\u0641\u0631\u06cc\u0646\u06cc \u0634\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0634\u0648\u062f.<\/p>\n<\/li>\n<\/ul>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0645\u062b\u0627\u0644\u06cc \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a \u06a9\u0647 \u062a\u0641\u0627\u0648\u062a \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<pre><code class=\"lang-python\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Temperature<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span>(<span class=\"hljs-params\">self, celsius<\/span>):<\/span>\n        self.celsius = celsius\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__str__<\/span>(<span class=\"hljs-params\">self<\/span>):<\/span>\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{self.celsius}<\/span>\u00b0C\"<\/span>\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__repr__<\/span>(<span class=\"hljs-params\">self<\/span>):<\/span>\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">f\"Temperature(<span class=\"hljs-subst\">{self.celsius}<\/span>)\"<\/span>\n\ntemp = Temperature(<span class=\"hljs-number\">25<\/span>)\nprint(str(temp))      <span class=\"hljs-comment\"># Output: 25\u00b0C<\/span>\nprint(repr(temp))     <span class=\"hljs-comment\"># Output: Temperature(25)<\/span>\n<\/code><\/pre>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644:<\/p>\n<ul>\n<li>\n<p><code>__str__<\/code>  \u06cc\u06a9 \u0631\u0634\u062a\u0647 \u06a9\u0627\u0631\u0628\u0631 \u067e\u0633\u0646\u062f \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u062f\u0645\u0627 \u0631\u0627 \u0628\u0627 \u06cc\u06a9 \u0646\u0645\u0627\u062f \u062f\u0631\u062c\u0647 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f<\/p>\n<\/li>\n<li>\n<p><code>__repr__<\/code>  \u0631\u0634\u062a\u0647 \u0627\u06cc \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0631\u0648\u0634 \u0627\u06cc\u062c\u0627\u062f \u0634\u06cc \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u060c \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0627\u0634\u06a9\u0627\u0644 \u0632\u062f\u0627\u06cc\u06cc \u0645\u0641\u06cc\u062f \u0627\u0633\u062a<\/p>\n<\/li>\n<\/ul>\n<p>\u0648\u0642\u062a\u06cc \u0627\u0632 \u0627\u06cc\u0646 \u0627\u0634\u06cc\u0627\u0621 \u062f\u0631 \u0632\u0645\u06cc\u0646\u0647 \u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u062f \u060c \u062a\u0641\u0627\u0648\u062a \u0645\u0634\u062e\u0635 \u0645\u06cc \u0634\u0648\u062f:<\/p>\n<ul>\n<li>\n<p>\u0648\u0642\u062a\u06cc \u062a\u0648 print \u062f\u0645\u0627 \u060c \u0646\u0633\u062e\u0647 \u06a9\u0627\u0631\u0628\u0631 \u067e\u0633\u0646\u062f \u0631\u0627 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u062f: <code>25\u00b0C<\/code><\/p>\n<\/li>\n<li>\n<p>\u0648\u0642\u062a\u06cc \u0634\u06cc \u0631\u0627 \u062f\u0631 \u067e\u0627\u06cc\u062a\u0648\u0646 \u0628\u0627\u0632\u0631\u0633\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u062f console\u060c \u0646\u0633\u062e\u0647 \u0645\u0641\u0635\u0644 \u0631\u0627 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u062f: <code>Temperature(25)<\/code><\/p>\n<\/li>\n<\/ul>\n<h3 id=\"heading-practical-example-custom-error-class\"><span class=\"ez-toc-section\" id=\"%d9%85%d8%ab%d8%a7%d9%84_%d8%b9%d9%85%d9%84%db%8c_%da%a9%d9%84%d8%a7%d8%b3_%d8%ae%d8%b7%d8%a7%db%8c_%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c\"><\/span><strong>\u0645\u062b\u0627\u0644 \u0639\u0645\u0644\u06cc: \u06a9\u0644\u0627\u0633 \u062e\u0637\u0627\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u06cc\u06a9 \u06a9\u0644\u0627\u0633 \u062e\u0637\u0627\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0634\u06a9\u0627\u0644 \u0632\u062f\u0627\u06cc\u06cc \u0628\u0647\u062a\u0631\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u062f. \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f <code>__str__<\/code> \u0648\u062a <code>__repr__<\/code> \u062a\u0627 \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc \u062e\u0637\u0627\u06cc \u062e\u0648\u062f \u0631\u0627 \u0645\u0641\u06cc\u062f\u062a\u0631 \u06a9\u0646\u06cc\u062f:<\/p>\n<pre><code class=\"lang-python\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ValidationError<\/span>(<span class=\"hljs-params\">Exception<\/span>):<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span>(<span class=\"hljs-params\">self, field, message, value=None<\/span>):<\/span>\n        self.field = field\n        self.message = message\n        self.value = value\n        super().__init__(self.message)\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__str__<\/span>(<span class=\"hljs-params\">self<\/span>):<\/span>\n        <span class=\"hljs-keyword\">if<\/span> self.value <span class=\"hljs-keyword\">is<\/span> <span class=\"hljs-keyword\">not<\/span> <span class=\"hljs-literal\">None<\/span>:\n            <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">f\"Error in field '<span class=\"hljs-subst\">{self.field}<\/span>': <span class=\"hljs-subst\">{self.message}<\/span> (got: <span class=\"hljs-subst\">{repr(self.value)}<\/span>)\"<\/span>\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">f\"Error in field '<span class=\"hljs-subst\">{self.field}<\/span>': <span class=\"hljs-subst\">{self.message}<\/span>\"<\/span>\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__repr__<\/span>(<span class=\"hljs-params\">self<\/span>):<\/span>\n        <span class=\"hljs-keyword\">if<\/span> self.value <span class=\"hljs-keyword\">is<\/span> <span class=\"hljs-keyword\">not<\/span> <span class=\"hljs-literal\">None<\/span>:\n            <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">f\"ValidationError(field='<span class=\"hljs-subst\">{self.field}<\/span>', message=\"<span class=\"hljs-subst\">{self.message}<\/span>\", value=<span class=\"hljs-subst\">{repr(self.value)}<\/span>)\"<\/span>\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">f\"ValidationError(field='<span class=\"hljs-subst\">{self.field}<\/span>', message=\"<span class=\"hljs-subst\">{self.message}<\/span>\")\"<\/span>\n\n<span class=\"hljs-comment\"># Usage<\/span>\n<span class=\"hljs-keyword\">try<\/span>:\n    age = <span class=\"hljs-number\">-5<\/span>\n    <span class=\"hljs-keyword\">if<\/span> age &lt; <span class=\"hljs-number\">0<\/span>:\n        <span class=\"hljs-keyword\">raise<\/span> ValidationError(<span class=\"hljs-string\">\"age\"<\/span>, <span class=\"hljs-string\">\"Age must be positive\"<\/span>, age)\n<span class=\"hljs-keyword\">except<\/span> ValidationError <span class=\"hljs-keyword\">as<\/span> e:\n    print(e)  <span class=\"hljs-comment\"># Output: Error in field 'age': Age must be positive (got: -5)<\/span>\n<\/code><\/pre>\n<p>\u0627\u06cc\u0646 \u06a9\u0644\u0627\u0633 \u062e\u0637\u0627\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc \u0645\u0632\u0627\u06cc\u0627\u06cc \u0645\u062e\u062a\u0644\u0641\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<ol>\n<li>\n<p>\u0627\u06cc\u0646 \u0634\u0627\u0645\u0644 \u0646\u0627\u0645 \u0641\u06cc\u0644\u062f \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u062e\u0637\u0627 \u0631\u062e \u062f\u0627\u062f\u0647 \u0627\u0633\u062a<\/p>\n<\/li>\n<li>\n<p>\u0627\u06cc\u0646 \u0645\u0642\u062f\u0627\u0631 \u0648\u0627\u0642\u0639\u06cc \u0631\u0627 \u06a9\u0647 \u0628\u0627\u0639\u062b \u062e\u0637\u0627 \u0634\u062f\u0647 \u0627\u0633\u062a \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f<\/p>\n<\/li>\n<li>\n<p>\u0627\u06cc\u0646 \u0647\u0645 \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc \u062e\u0637\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u067e\u0633\u0646\u062f \u0648 \u0647\u0645 \u0645\u0641\u0635\u0644 \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f<\/p>\n<\/li>\n<li>\n<p>\u0628\u0627 \u062f\u0631\u062c \u062a\u0645\u0627\u0645 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u0631\u0628\u0648\u0637\u0647 \u060c \u0627\u0634\u06a9\u0627\u0644 \u0632\u062f\u0627\u06cc\u06cc \u0631\u0627 \u0622\u0633\u0627\u0646\u062a\u0631 \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"heading-operator-overloading\"><span class=\"ez-toc-section\" id=\"%d8%a7%d8%b6%d8%a7%d9%81%d9%87_%d8%a8%d8%a7%d8%b1_%d8%a7%d9%be%d8%b1%d8%a7%d8%aa%d9%88%d8%b1\"><\/span><strong>\u0627\u0636\u0627\u0641\u0647 \u0628\u0627\u0631 \u0627\u067e\u0631\u0627\u062a\u0648\u0631<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u0636\u0627\u0641\u0647 \u0628\u0627\u0631 \u0627\u067e\u0631\u0627\u062a\u0648\u0631 \u06cc\u06a9\u06cc \u0627\u0632 \u0642\u062f\u0631\u062a\u0645\u0646\u062f\u062a\u0631\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u067e\u0627\u06cc\u062a\u0648\u0646 \u0627\u0633\u062a. \u0627\u06cc\u0646 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u0647\u0646\u06af\u0627\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u067e\u0631\u0627\u062a\u0648\u0631\u0647\u0627 \u060c \u0627\u0634\u06cc\u0627\u0621 \u062e\u0648\u062f \u0631\u0627 \u0686\u06af\u0648\u0646\u0647 \u0631\u0641\u062a\u0627\u0631 \u06a9\u0646\u06cc\u062f <code>+<\/code>\u0628\u0627 <code>-<\/code>\u0628\u0627 <code>*<\/code>\u0648\u062a <code>==<\/code>\u0628\u0634\u0631 \u0627\u06cc\u0646 \u0628\u0627\u0639\u062b \u0645\u06cc \u0634\u0648\u062f \u06a9\u062f \u0634\u0645\u0627 \u0628\u0635\u0631\u06cc \u0648 \u062e\u0648\u0627\u0646\u062f\u0646\u06cc \u062a\u0631 \u0634\u0648\u062f.<\/p>\n<h3 id=\"heading-arithmetic-operators\"><span class=\"ez-toc-section\" id=\"%d8%a7%d9%be%d8%b1%d8%a7%d8%aa%d9%88%d8%b1%d9%87%d8%a7%db%8c_%d8%ad%d8%b3%d8%a7%d8%a8%db%8c\"><\/span><strong>\u0627\u067e\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u062d\u0633\u0627\u0628\u06cc<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u067e\u0627\u06cc\u062a\u0648\u0646 \u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u06a9\u0644\u06cc\u0647 \u0639\u0645\u0644\u06cc\u0627\u062a \u062d\u0633\u0627\u0628\u06cc \u0627\u0633\u0627\u0633\u06cc \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f. \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9 \u062c\u062f\u0648\u0644 \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a \u06a9\u0647 \u06a9\u062f\u0627\u0645 \u0631\u0648\u0634 \u0628\u0627 \u06a9\u062f\u0627\u0645 \u0627\u067e\u0631\u0627\u062a\u0648\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u062f\u0627\u0631\u062f:<\/p>\n<div class=\"hn-table\">\n<table>\n<thead>\n<tr>\n<td>\u0639\u0645\u0644\u06af\u0631<\/td>\n<td>\u0631\u0648\u0634 \u062c\u0627\u062f\u0648\u06cc\u06cc<\/td>\n<td>\u0634\u0631\u062d<\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>+<\/code><\/td>\n<td><code>__add__<\/code><\/td>\n<td>\u0627\u0641\u0632\u0648\u062f\u0646<\/td>\n<\/tr>\n<tr>\n<td><code>-<\/code><\/td>\n<td><code>__sub__<\/code><\/td>\n<td>\u062a\u0641\u0631\u06cc\u0642<\/td>\n<\/tr>\n<tr>\n<td><code>*<\/code><\/td>\n<td><code>__mul__<\/code><\/td>\n<td>\u0636\u0631\u0628<\/td>\n<\/tr>\n<tr>\n<td><code>\/<\/code><\/td>\n<td><code>__truediv__<\/code><\/td>\n<td>\u0628\u062e\u0634<\/td>\n<\/tr>\n<tr>\n<td><code>\/\/<\/code><\/td>\n<td><code>__floordiv__<\/code><\/td>\n<td>\u062a\u0642\u0633\u06cc\u0645 \u06a9\u0641<\/td>\n<\/tr>\n<tr>\n<td><code>%<\/code><\/td>\n<td><code>__mod__<\/code><\/td>\n<td>\u0645\u062f\u0648\u0644\u0648<\/td>\n<\/tr>\n<tr>\n<td><code>**<\/code><\/td>\n<td><code>__pow__<\/code><\/td>\n<td>\u0645\u0641\u0647\u0648\u0645<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3 id=\"heading-comparison-operators\"><span class=\"ez-toc-section\" id=\"%d8%a7%d9%be%d8%b1%d8%a7%d8%aa%d9%88%d8%b1%d9%87%d8%a7%db%8c_%d9%85%d9%82%d8%a7%db%8c%d8%b3%d9%87\"><\/span><strong>\u0627\u067e\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u0645\u0642\u0627\u06cc\u0633\u0647<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0647 \u0647\u0645\u06cc\u0646 \u062a\u0631\u062a\u06cc\u0628 \u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0631\u0648\u0634 \u0645\u0642\u0627\u06cc\u0633\u0647 \u0627\u0634\u06cc\u0627\u0621 \u062e\u0648\u062f \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"hn-table\">\n<table>\n<thead>\n<tr>\n<td>\u0639\u0645\u0644\u06af\u0631<\/td>\n<td>\u0631\u0648\u0634 \u062c\u0627\u062f\u0648\u06cc\u06cc<\/td>\n<td>\u0634\u0631\u062d<\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>==<\/code><\/td>\n<td><code>__eq__<\/code><\/td>\n<td>\u0628\u0631\u0627\u0628\u0631<\/td>\n<\/tr>\n<tr>\n<td><code>!=<\/code><\/td>\n<td><code>__ne__<\/code><\/td>\n<td>\u0628\u0631\u0627\u0628\u0631 \u0646\u06cc\u0633\u062a<\/td>\n<\/tr>\n<tr>\n<td><code>&lt;<\/code><\/td>\n<td><code>__lt__<\/code><\/td>\n<td>\u06a9\u0645\u062a\u0631 \u0627\u0632<\/td>\n<\/tr>\n<tr>\n<td><code>&gt;<\/code><\/td>\n<td><code>__gt__<\/code><\/td>\n<td>\u0628\u0632\u0631\u06af\u062a\u0631 \u0627\u0632<\/td>\n<\/tr>\n<tr>\n<td><code>&lt;=<\/code><\/td>\n<td><code>__le__<\/code><\/td>\n<td>\u06a9\u0645\u062a\u0631 \u0627\u0632 \u06cc\u0627 \u0628\u0631\u0627\u0628\u0631 \u0628\u0627<\/td>\n<\/tr>\n<tr>\n<td><code>&gt;=<\/code><\/td>\n<td><code>__ge__<\/code><\/td>\n<td>\u0628\u0632\u0631\u06af\u062a\u0631 \u0627\u0632 \u06cc\u0627 \u0628\u0631\u0627\u0628\u0631 \u0628\u0627<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3 id=\"heading-practical-example-money-class\"><span class=\"ez-toc-section\" id=\"%d9%85%d8%ab%d8%a7%d9%84_%d8%b9%d9%85%d9%84%db%8c_%da%a9%d9%84%d8%a7%d8%b3_%d9%be%d9%88%d9%84\"><\/span><strong>\u0645\u062b\u0627\u0644 \u0639\u0645\u0644\u06cc: \u06a9\u0644\u0627\u0633 \u067e\u0648\u0644<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u06cc\u06a9 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 <code>Money<\/code> \u06a9\u0644\u0627\u0633 \u06a9\u0647 \u0639\u0645\u0644\u06cc\u0627\u062a \u0627\u0631\u0632\u06cc \u0631\u0627 \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f. \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644 \u0631\u0648\u0634 \u0627\u062c\u0631\u0627\u06cc \u0686\u0646\u062f\u06cc\u0646 \u0627\u067e\u0631\u0627\u062a\u0648\u0631 \u0648 \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u0645\u0648\u0627\u0631\u062f \u0644\u0628\u0647 \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<pre><code class=\"lang-python\"><span class=\"hljs-keyword\">from<\/span> functools <span class=\"hljs-keyword\">import<\/span> total_ordering\n<span class=\"hljs-keyword\">from<\/span> decimal <span class=\"hljs-keyword\">import<\/span> Decimal\n\n<span class=\"hljs-meta\">@total_ordering  # Implements all comparison methods based \u0631\u0648\u06cc __eq__ and __lt__<\/span>\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Money<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span>(<span class=\"hljs-params\">self, amount, currency=<span class=\"hljs-string\">\"USD\"<\/span><\/span>):<\/span>\n        self.amount = Decimal(str(amount))\n        self.currency = currency\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__add__<\/span>(<span class=\"hljs-params\">self, other<\/span>):<\/span>\n        <span class=\"hljs-keyword\">if<\/span> <span class=\"hljs-keyword\">not<\/span> isinstance(other, Money):\n            <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-built_in\">NotImplemented<\/span>\n        <span class=\"hljs-keyword\">if<\/span> self.currency != other.currency:\n            <span class=\"hljs-keyword\">raise<\/span> ValueError(<span class=\"hljs-string\">f\"Cannot add different currencies: <span class=\"hljs-subst\">{self.currency}<\/span> and <span class=\"hljs-subst\">{other.currency}<\/span>\"<\/span>)\n        <span class=\"hljs-keyword\">return<\/span> Money(self.amount + other.amount, self.currency)\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__sub__<\/span>(<span class=\"hljs-params\">self, other<\/span>):<\/span>\n        <span class=\"hljs-keyword\">if<\/span> <span class=\"hljs-keyword\">not<\/span> isinstance(other, Money):\n            <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-built_in\">NotImplemented<\/span>\n        <span class=\"hljs-keyword\">if<\/span> self.currency != other.currency:\n            <span class=\"hljs-keyword\">raise<\/span> ValueError(<span class=\"hljs-string\">f\"Cannot subtract different currencies: <span class=\"hljs-subst\">{self.currency}<\/span> and <span class=\"hljs-subst\">{other.currency}<\/span>\"<\/span>)\n        <span class=\"hljs-keyword\">return<\/span> Money(self.amount - other.amount, self.currency)\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__mul__<\/span>(<span class=\"hljs-params\">self, other<\/span>):<\/span>\n        <span class=\"hljs-keyword\">if<\/span> isinstance(other, (int, float, Decimal)):\n            <span class=\"hljs-keyword\">return<\/span> Money(self.amount * Decimal(str(other)), self.currency)\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-built_in\">NotImplemented<\/span>\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__truediv__<\/span>(<span class=\"hljs-params\">self, other<\/span>):<\/span>\n        <span class=\"hljs-keyword\">if<\/span> isinstance(other, (int, float, Decimal)):\n            <span class=\"hljs-keyword\">return<\/span> Money(self.amount \/ Decimal(str(other)), self.currency)\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-built_in\">NotImplemented<\/span>\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__eq__<\/span>(<span class=\"hljs-params\">self, other<\/span>):<\/span>\n        <span class=\"hljs-keyword\">if<\/span> <span class=\"hljs-keyword\">not<\/span> isinstance(other, Money):\n            <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-built_in\">NotImplemented<\/span>\n        <span class=\"hljs-keyword\">return<\/span> self.currency == other.currency <span class=\"hljs-keyword\">and<\/span> self.amount == other.amount\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__lt__<\/span>(<span class=\"hljs-params\">self, other<\/span>):<\/span>\n        <span class=\"hljs-keyword\">if<\/span> <span class=\"hljs-keyword\">not<\/span> isinstance(other, Money):\n            <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-built_in\">NotImplemented<\/span>\n        <span class=\"hljs-keyword\">if<\/span> self.currency != other.currency:\n            <span class=\"hljs-keyword\">raise<\/span> ValueError(<span class=\"hljs-string\">f\"Cannot compare different currencies: <span class=\"hljs-subst\">{self.currency}<\/span> and <span class=\"hljs-subst\">{other.currency}<\/span>\"<\/span>)\n        <span class=\"hljs-keyword\">return<\/span> self.amount &lt; other.amount\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__str__<\/span>(<span class=\"hljs-params\">self<\/span>):<\/span>\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{self.currency}<\/span> <span class=\"hljs-subst\">{self.amount:<span class=\"hljs-number\">.2<\/span>f}<\/span>\"<\/span>\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__repr__<\/span>(<span class=\"hljs-params\">self<\/span>):<\/span>\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">f\"Money(<span class=\"hljs-subst\">{repr(float(self.amount))}<\/span>, <span class=\"hljs-subst\">{repr(self.currency)}<\/span>)\"<\/span>\n<\/code><\/pre>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0627\u0635\u0644\u06cc \u0627\u06cc\u0646 \u0631\u0627 \u062a\u062c\u0632\u06cc\u0647 \u06a9\u0646\u06cc\u0645 <code>Money<\/code> \u06a9\u0644\u0627\u0633:<\/p>\n<ol>\n<li>\n<p><strong>\u062f\u0633\u062a \u0632\u062f\u0646 \u0628\u0647<\/strong>: \u0645\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645 <code>Decimal<\/code> \u0628\u0647 \u062c\u0627\u06cc <code>float<\/code> \u0628\u0631\u0627\u06cc \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u0645\u0634\u06a9\u0644\u0627\u062a \u062f\u0642\u06cc\u0642 \u0634\u0646\u0627\u0648\u0631 \u0628\u0627 \u0645\u062d\u0627\u0633\u0628\u0627\u062a \u067e\u0648\u0644.<\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u06cc\u0645\u0646\u06cc \u0627\u0631\u0632<\/strong>: \u06a9\u0644\u0627\u0633 \u0628\u0631\u0627\u06cc \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u062e\u0637\u0627 \u0627\u0632 \u0639\u0645\u0644\u06a9\u0631\u062f \u0628\u06cc\u0646 \u0627\u0631\u0632\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<\/li>\n<li>\n<p><strong>\u0646\u0648\u0639 \u0628\u0631\u0631\u0633\u06cc<\/strong>: \u0647\u0631 \u0631\u0648\u0634 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u0639\u0645\u0644 \u062f\u06cc\u06af\u0631 \u0627\u0632 \u0646\u0648\u0639 \u0635\u062d\u06cc\u062d \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a <code>isinstance()<\/code>\u0628\u0634\u0631<\/p>\n<\/li>\n<li>\n<p><strong>\u0646\u0634\u0627\u0646\u06af\u0631<\/strong>: \u0648\u0642\u062a\u06cc \u06cc\u06a9 \u0639\u0645\u0644 \u0645\u0639\u0646\u06cc \u0646\u062f\u0627\u0631\u062f \u060c \u0645\u0627 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u06cc\u0645 <code>NotImplemented<\/code> \u0628\u0631\u0627\u06cc \u0627\u062c\u0627\u0632\u0647 \u062f\u0627\u062f\u0646 \u0628\u0647 \u067e\u0627\u06cc\u062a\u0648\u0646 \u0639\u0645\u0644 \u0645\u0639\u06a9\u0648\u0633 \u0631\u0627 \u0627\u0645\u062a\u062d\u0627\u0646 \u06a9\u0646\u06cc\u062f.<\/p>\n<\/li>\n<li>\n<p><strong>total_ordering<\/strong>: \u0627\u06cc\u0646 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u062a\u0645\u0627\u0645 \u0631\u0648\u0634\u0647\u0627\u06cc \u0645\u0642\u0627\u06cc\u0633\u0647 \u0631\u0627 \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0645\u06cc \u06a9\u0646\u062f \u0631\u0648\u06cc <code>__eq__<\/code>  \u0648\u062a <code>__lt__<\/code>\u0628\u0634\u0631<\/p>\n<\/li>\n<\/ol>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0631\u0648\u0634 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <code>Money<\/code> \u06a9\u0644\u0627\u0633:<\/p>\n<pre><code class=\"lang-python\"><span class=\"hljs-comment\"># Basic arithmetic<\/span>\nwallet = Money(<span class=\"hljs-number\">100<\/span>, <span class=\"hljs-string\">\"USD\"<\/span>)\nexpense = Money(<span class=\"hljs-number\">20<\/span>, <span class=\"hljs-string\">\"USD\"<\/span>)\nremaining = wallet - expense\nprint(remaining)  <span class=\"hljs-comment\"># Output: USD 80.00<\/span>\n\n<span class=\"hljs-comment\"># Working with different currencies<\/span>\nsalary = Money(<span class=\"hljs-number\">5000<\/span>, <span class=\"hljs-string\">\"USD\"<\/span>)\nbonus = Money(<span class=\"hljs-number\">1000<\/span>, <span class=\"hljs-string\">\"USD\"<\/span>)\ntotal = salary + bonus\nprint(total)  <span class=\"hljs-comment\"># Output: USD 6000.00<\/span>\n\n<span class=\"hljs-comment\"># Division by scalar<\/span>\nweekly_pay = salary \/ <span class=\"hljs-number\">4<\/span>\nprint(weekly_pay)  <span class=\"hljs-comment\"># Output: USD 1250.00<\/span>\n\n<span class=\"hljs-comment\"># Comparisons<\/span>\nprint(Money(<span class=\"hljs-number\">100<\/span>, <span class=\"hljs-string\">\"USD\"<\/span>) &gt; Money(<span class=\"hljs-number\">50<\/span>, <span class=\"hljs-string\">\"USD\"<\/span>))  <span class=\"hljs-comment\"># Output: True<\/span>\nprint(Money(<span class=\"hljs-number\">100<\/span>, <span class=\"hljs-string\">\"USD\"<\/span>) == Money(<span class=\"hljs-number\">100<\/span>, <span class=\"hljs-string\">\"USD\"<\/span>))  <span class=\"hljs-comment\"># Output: True<\/span>\n\n<span class=\"hljs-comment\"># Error handling<\/span>\n<span class=\"hljs-keyword\">try<\/span>:\n    Money(<span class=\"hljs-number\">100<\/span>, <span class=\"hljs-string\">\"USD\"<\/span>) + Money(<span class=\"hljs-number\">100<\/span>, <span class=\"hljs-string\">\"EUR\"<\/span>)\n<span class=\"hljs-keyword\">except<\/span> ValueError <span class=\"hljs-keyword\">as<\/span> e:\n    print(e)  <span class=\"hljs-comment\"># Output: Cannot add different currencies: USD and EUR<\/span>\n<\/code><\/pre>\n<p>\u0627\u06cc\u0646 <code>Money<\/code> \u06a9\u0644\u0627\u0633 \u0686\u0646\u062f\u06cc\u0646 \u0645\u0641\u0647\u0648\u0645 \u0645\u0647\u0645 \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<ol>\n<li>\n<p>\u0631\u0648\u0634 \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u0627\u0646\u0648\u0627\u0639 \u0645\u062e\u062a\u0644\u0641 \u0639\u0645\u0644<\/p>\n<\/li>\n<li>\n<p>\u0631\u0648\u0634 \u0627\u062c\u0631\u0627\u06cc \u0635\u062d\u06cc\u062d \u062e\u0637\u0627\u06cc \u0645\u0646\u0627\u0633\u0628<\/p>\n<\/li>\n<li>\n<p>\u0631\u0648\u0634 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <code>@total_ordering<\/code> \u062a\u0632\u06cc\u06cc\u0646 \u06a9\u0646\u0646\u062f\u0647<\/p>\n<\/li>\n<li>\n<p>\u0631\u0648\u0634 \u062d\u0641\u0638 \u062f\u0642\u062a \u062f\u0631 \u0645\u062d\u0627\u0633\u0628\u0627\u062a \u0645\u0627\u0644\u06cc<\/p>\n<\/li>\n<li>\n<p>\u0631\u0648\u0634 \u0627\u0631\u0627\u0626\u0647 \u0647\u0631 \u062f\u0648 \u0631\u0648\u0634 \u0631\u0634\u062a\u0647 \u0648 \u0646\u0645\u0627\u06cc\u0634<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"heading-container-methods\"><span class=\"ez-toc-section\" id=\"container_%d8%b1%d9%88%d8%b4\"><\/span><strong>Container  \u0631\u0648\u0634<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Container  \u0631\u0648\u0634\u0647\u0627 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0627\u0634\u06cc\u0627\u0621 \u062e\u0648\u062f \u0631\u0627 \u0645\u0627\u0646\u0646\u062f \u0638\u0631\u0648\u0641 \u062f\u0627\u062e\u0644\u06cc \u0645\u0627\u0646\u0646\u062f \u0644\u06cc\u0633\u062a \u060c \u0641\u0631\u0647\u0646\u06af \u0644\u063a\u062a \u06cc\u0627 \u0645\u062c\u0645\u0648\u0639\u0647 \u0631\u0641\u062a\u0627\u0631 \u06a9\u0646\u06cc\u062f. \u0627\u06cc\u0646 \u0627\u0645\u0631 \u0628\u0647 \u0648\u06cc\u0698\u0647 \u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0631\u0641\u062a\u0627\u0631 \u0633\u0641\u0627\u0631\u0634\u06cc \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0648 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627 \u0645\u0641\u06cc\u062f \u0627\u0633\u062a.<\/p>\n<h3 id=\"heading-sequence-protocol\"><span class=\"ez-toc-section\" id=\"%d9%be%d8%b1%d9%88%d8%aa%da%a9%d9%84_%d8%aa%d9%88%d8%a7%d9%84%db%8c\"><\/span><strong>\u067e\u0631\u0648\u062a\u06a9\u0644 \u062a\u0648\u0627\u0644\u06cc<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0634\u06cc\u0621 \u062e\u0648\u062f \u0645\u0627\u0646\u0646\u062f \u06cc\u06a9 \u062f\u0646\u0628\u0627\u0644\u0647 \u0631\u0641\u062a\u0627\u0631 \u06a9\u0646\u062f (\u0645\u0627\u0646\u0646\u062f \u0644\u06cc\u0633\u062a \u06cc\u0627 tuple) \u060c \u0628\u0627\u06cc\u062f \u0627\u06cc\u0646 \u0631\u0648\u0634 \u0647\u0627 \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"hn-table\">\n<table>\n<thead>\n<tr>\n<td>\u0631\u0648\u0634<\/td>\n<td>\u0634\u0631\u062d<\/td>\n<td>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0645\u062b\u0627\u0644<\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>__len__<\/code><\/td>\n<td>\u0637\u0648\u0644 \u0637\u0648\u0644 container<\/td>\n<td><code>len(obj)<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>__getitem__<\/code><\/td>\n<td>\u0627\u062c\u0627\u0632\u0647 \u0641\u0647\u0631\u0633\u062a \u0628\u0646\u062f\u06cc \u0628\u0627 <code>obj[key]<\/code><\/td>\n<td><code>obj[0]<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>__setitem__<\/code><\/td>\n<td>\u0628\u0647 \u062a\u06a9\u0644\u06cc\u0641 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f <code>obj[key] = value<\/code><\/td>\n<td><code>obj[0] = 42<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>__delitem__<\/code><\/td>\n<td>\u0627\u062c\u0627\u0632\u0647 \u062d\u0630\u0641 \u0628\u0627 <code>del obj[key]<\/code><\/td>\n<td><code>del obj[0]<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>__iter__<\/code><\/td>\n<td>\u06cc\u06a9 \u062a\u06a9\u0631\u0627\u0631 \u06a9\u0646\u0646\u062f\u0647 \u0631\u0627 \u0628\u0631\u0627\u06cc container<\/td>\n<td><code>for item in obj:<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>__contains__<\/code><\/td>\n<td>\u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc <code>in<\/code> \u0639\u0645\u0644\u06af\u0631<\/td>\n<td><code>42 in obj<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3 id=\"heading-mapping-protocol\"><span class=\"ez-toc-section\" id=\"%d9%be%d8%b1%d9%88%d8%aa%da%a9%d9%84_%d9%86%d9%82%d8%b4%d9%87_%d8%a8%d8%b1%d8%af%d8%a7%d8%b1%db%8c\"><\/span><strong>\u067e\u0631\u0648\u062a\u06a9\u0644 \u0646\u0642\u0634\u0647 \u0628\u0631\u062f\u0627\u0631\u06cc<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0631\u0627\u06cc \u0631\u0641\u062a\u0627\u0631 \u0634\u0628\u06cc\u0647 \u0628\u0647 \u0641\u0631\u0647\u0646\u06af \u0644\u063a\u062a \u060c \u0634\u0645\u0627 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u0627\u06cc\u0646 \u0631\u0648\u0634 \u0647\u0627 \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"hn-table\">\n<table>\n<thead>\n<tr>\n<td>\u0631\u0648\u0634<\/td>\n<td>\u0634\u0631\u062d<\/td>\n<td>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0645\u062b\u0627\u0644<\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>__getitem__<\/code><\/td>\n<td>\u0645\u0642\u062f\u0627\u0631 \u0631\u0627 \u0628\u0627 \u06a9\u0644\u06cc\u062f \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f<\/td>\n<td><code>obj[\"key\"]<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>__setitem__<\/code><\/td>\n<td>\u0645\u0642\u062f\u0627\u0631 \u0631\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 \u06a9\u0644\u06cc\u062f \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f<\/td>\n<td><code>obj[\"key\"] = value<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>__delitem__<\/code><\/td>\n<td>\u062c\u0641\u062a \u0627\u0631\u0632\u0634 \u06a9\u0644\u06cc\u062f \u0631\u0627 \u062d\u0630\u0641 \u06a9\u0646\u06cc\u062f<\/td>\n<td><code>del obj[\"key\"]<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>__len__<\/code><\/td>\n<td>\u062a\u0639\u062f\u0627\u062f \u062c\u0641\u062a \u0647\u0627\u06cc \u0627\u0631\u0632\u0634 \u06a9\u0644\u06cc\u062f \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f<\/td>\n<td><code>len(obj)<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>__iter__<\/code><\/td>\n<td>\u0628\u06cc\u0634 \u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627<\/td>\n<td><code>for key in obj:<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>__contains__<\/code><\/td>\n<td>\u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u06a9\u0644\u06cc\u062f \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f<\/td>\n<td><code>\"key\" in obj<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3 id=\"heading-practical-example-custom-cache\"><span class=\"ez-toc-section\" id=\"%d9%85%d8%ab%d8%a7%d9%84_%d8%b9%d9%85%d9%84%db%8c_%d8%ad%d8%a7%d9%81%d8%b8%d9%87_%d9%be%d9%86%d9%87%d8%a7%d9%86_%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c\"><\/span><strong>\u0645\u062b\u0627\u0644 \u0639\u0645\u0644\u06cc: \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 \u0633\u0641\u0627\u0631\u0634\u06cc<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u06cc\u06a9 \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u0632\u0645\u0627\u0646 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0648\u0631\u0648\u062f\u06cc \u0647\u0627\u06cc \u0642\u062f\u06cc\u0645\u06cc \u0631\u0627 \u0645\u0646\u0642\u0636\u06cc \u0645\u06cc \u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644 \u0631\u0648\u0634 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0639\u0631\u0641 \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f container \u0627\u06cc\u0646 \u0645\u0627\u0646\u0646\u062f \u06cc\u06a9 \u0641\u0631\u0647\u0646\u06af \u0644\u063a\u062a \u0627\u0645\u0627 \u0628\u0627 \u0639\u0645\u0644\u06a9\u0631\u062f \u0627\u0636\u0627\u0641\u06cc \u0631\u0641\u062a\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f:<\/p>\n<pre><code class=\"lang-python\"><span class=\"hljs-keyword\">import<\/span> time\n<span class=\"hljs-keyword\">from<\/span> collections <span class=\"hljs-keyword\">import<\/span> OrderedDict\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ExpiringCache<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span>(<span class=\"hljs-params\">self, max_age_seconds=<span class=\"hljs-number\">60<\/span><\/span>):<\/span>\n        self.max_age = max_age_seconds\n        self._cache = OrderedDict()  <span class=\"hljs-comment\"># {key: (value, timestamp)}<\/span>\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__getitem__<\/span>(<span class=\"hljs-params\">self, key<\/span>):<\/span>\n        <span class=\"hljs-keyword\">if<\/span> key <span class=\"hljs-keyword\">not<\/span> <span class=\"hljs-keyword\">in<\/span> self._cache:\n            <span class=\"hljs-keyword\">raise<\/span> KeyError(key)\n\n        value, timestamp = self._cache[key]\n        <span class=\"hljs-keyword\">if<\/span> time.time() - timestamp &gt; self.max_age:\n            <span class=\"hljs-keyword\">del<\/span> self._cache[key]\n            <span class=\"hljs-keyword\">raise<\/span> KeyError(<span class=\"hljs-string\">f\"Key '<span class=\"hljs-subst\">{key}<\/span>' has expired\"<\/span>)\n\n        <span class=\"hljs-keyword\">return<\/span> value\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__setitem__<\/span>(<span class=\"hljs-params\">self, key, value<\/span>):<\/span>\n        self._cache[key] = (value, time.time())\n        self._cache.move_to_end(key)  <span class=\"hljs-comment\"># Move to end to maintain insertion order<\/span>\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__delitem__<\/span>(<span class=\"hljs-params\">self, key<\/span>):<\/span>\n        <span class=\"hljs-keyword\">del<\/span> self._cache[key]\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__len__<\/span>(<span class=\"hljs-params\">self<\/span>):<\/span>\n        self._clean_expired()  <span class=\"hljs-comment\"># Clean expired items before reporting length<\/span>\n        <span class=\"hljs-keyword\">return<\/span> len(self._cache)\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__iter__<\/span>(<span class=\"hljs-params\">self<\/span>):<\/span>\n        self._clean_expired()  <span class=\"hljs-comment\"># Clean expired items before iteration<\/span>\n        <span class=\"hljs-keyword\">for<\/span> key <span class=\"hljs-keyword\">in<\/span> self._cache:\n            <span class=\"hljs-keyword\">yield<\/span> key\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__contains__<\/span>(<span class=\"hljs-params\">self, key<\/span>):<\/span>\n        <span class=\"hljs-keyword\">if<\/span> key <span class=\"hljs-keyword\">not<\/span> <span class=\"hljs-keyword\">in<\/span> self._cache:\n            <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-literal\">False<\/span>\n\n        _, timestamp = self._cache[key]\n        <span class=\"hljs-keyword\">if<\/span> time.time() - timestamp &gt; self.max_age:\n            <span class=\"hljs-keyword\">del<\/span> self._cache[key]\n            <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-literal\">False<\/span>\n\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-literal\">True<\/span>\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">_clean_expired<\/span>(<span class=\"hljs-params\">self<\/span>):<\/span>\n        <span class=\"hljs-string\">\"\"\"Remove all expired entries from the cache.\"\"\"<\/span>\n        now = time.time()\n        expired_keys = [\n            key <span class=\"hljs-keyword\">for<\/span> key, (_, timestamp) <span class=\"hljs-keyword\">in<\/span> self._cache.items()\n            <span class=\"hljs-keyword\">if<\/span> now - timestamp &gt; self.max_age\n        ]\n        <span class=\"hljs-keyword\">for<\/span> key <span class=\"hljs-keyword\">in<\/span> expired_keys:\n            <span class=\"hljs-keyword\">del<\/span> self._cache[key]\n<\/code><\/pre>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0631\u0648\u0634 \u0639\u0645\u0644\u06a9\u0631\u062f \u0627\u06cc\u0646 \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 \u0631\u0627 \u062a\u062c\u0632\u06cc\u0647 \u06a9\u0646\u06cc\u0645:<\/p>\n<ol>\n<li>\n<p><strong>\u0627\u0646\u0628\u0627\u0631\u0647<\/strong>: \u062d\u0627\u0641\u0638\u0647 \u0646\u0647\u0627\u0646 \u0627\u0632 \u0622\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f <code>OrderedDict<\/code> \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u062c\u0641\u062a \u0647\u0627\u06cc \u0627\u0631\u0632\u0634 \u06a9\u0644\u06cc\u062f\u06cc \u0628\u0647 \u0647\u0645\u0631\u0627\u0647 \u0632\u0645\u0627\u0646 \u0628\u0646\u062f\u06cc.<\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u0646\u0642\u0636\u0627\u0621<\/strong>: \u0647\u0631 \u0645\u0642\u062f\u0627\u0631 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u062a\u0627\u067e\u0644 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u0634\u0648\u062f <code>(value, timestamp)<\/code>\u0628\u0634\u0631 \u0647\u0646\u06af\u0627\u0645 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u06cc\u06a9 \u0645\u0642\u062f\u0627\u0631 \u060c \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0622\u06cc\u0627 \u0645\u0646\u0642\u0636\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a \u06cc\u0627 \u062e\u06cc\u0631.<\/p>\n<\/li>\n<li>\n<p><strong>Container  \u0631\u0648\u0634<\/strong>: \u06a9\u0644\u0627\u0633 \u062a\u0645\u0627\u0645 \u0631\u0648\u0634\u0647\u0627\u06cc \u0644\u0627\u0632\u0645 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0631\u0641\u062a\u0627\u0631 \u0645\u0627\u0646\u0646\u062f \u0641\u0631\u0647\u0646\u06af \u0644\u063a\u062a \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0645\u06cc \u06a9\u0646\u062f:<\/p>\n<ul>\n<li>\n<p><code>__getitem__<\/code>: \u0645\u0642\u0627\u062f\u06cc\u0631 \u0631\u0627 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0627\u0646\u0642\u0636\u0627 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<li>\n<p><code>__setitem__<\/code>: \u0645\u0642\u0627\u062f\u06cc\u0631 \u0631\u0627 \u0628\u0627 Timestamp \u0641\u0639\u0644\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<li>\n<p><code>__delitem__<\/code>: \u0648\u0631\u0648\u062f\u06cc \u0647\u0627 \u0631\u0627 \u062d\u0630\u0641 \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<li>\n<p><code>__len__<\/code>: \u062a\u0639\u062f\u0627\u062f \u0648\u0631\u0648\u062f\u06cc \u0647\u0627\u06cc \u063a\u06cc\u0631 \u06af\u0633\u062a\u0631\u062f\u0647 \u0631\u0627 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f<\/p>\n<\/li>\n<li>\n<p><code>__iter__<\/code>: \u062a\u06a9\u0631\u0627\u0631 \u0628\u06cc\u0634 \u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u063a\u06cc\u0631 \u06af\u0633\u062a\u0631\u062f\u0647<\/p>\n<\/li>\n<li>\n<p><code>__contains__<\/code>: \u062f\u0631 \u0635\u0648\u0631\u062a \u0648\u062c\u0648\u062f \u06cc\u06a9 \u06a9\u0644\u06cc\u062f \u060c \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0631\u0648\u0634 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062d\u0627\u0641\u0638\u0647 \u0646\u0647\u0627\u0646 \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<pre><code class=\"lang-python\"><span class=\"hljs-comment\"># Create a cache with 2-second expiration<\/span>\ncache = ExpiringCache(max_age_seconds=<span class=\"hljs-number\">2<\/span>)\n\n<span class=\"hljs-comment\"># Store some values<\/span>\ncache[<span class=\"hljs-string\">\"name\"<\/span>] = <span class=\"hljs-string\">\"Vivek\"<\/span>\ncache[<span class=\"hljs-string\">\"age\"<\/span>] = <span class=\"hljs-number\">30<\/span>\n\n<span class=\"hljs-comment\"># Access values<\/span>\nprint(<span class=\"hljs-string\">\"name\"<\/span> <span class=\"hljs-keyword\">in<\/span> cache)  <span class=\"hljs-comment\"># Output: True<\/span>\nprint(cache[<span class=\"hljs-string\">\"name\"<\/span>])    <span class=\"hljs-comment\"># Output: Vivek<\/span>\nprint(len(cache))       <span class=\"hljs-comment\"># Output: 2<\/span>\n\n<span class=\"hljs-comment\"># Wait for expiration<\/span>\nprint(<span class=\"hljs-string\">\"Waiting for expiration...\"<\/span>)\ntime.sleep(<span class=\"hljs-number\">3<\/span>)\n\n<span class=\"hljs-comment\"># Check expired values<\/span>\nprint(<span class=\"hljs-string\">\"name\"<\/span> <span class=\"hljs-keyword\">in<\/span> cache)  <span class=\"hljs-comment\"># Output: False<\/span>\n<span class=\"hljs-keyword\">try<\/span>:\n    print(cache[<span class=\"hljs-string\">\"name\"<\/span>])\n<span class=\"hljs-keyword\">except<\/span> KeyError <span class=\"hljs-keyword\">as<\/span> e:\n    print(<span class=\"hljs-string\">f\"KeyError: <span class=\"hljs-subst\">{e}<\/span>\"<\/span>)  <span class=\"hljs-comment\"># Output: KeyError: 'name'<\/span>\n\nprint(len(cache))  <span class=\"hljs-comment\"># Output: 0<\/span>\n<\/code><\/pre>\n<p>\u0627\u06cc\u0646 \u0627\u062c\u0631\u0627\u06cc \u062d\u0627\u0641\u0638\u0647 \u0646\u0647\u0627\u0646 \u0645\u0632\u0627\u06cc\u0627\u06cc \u0645\u062e\u062a\u0644\u0641\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<ol>\n<li>\n<p>\u0627\u0646\u0642\u0636\u0627 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0648\u0631\u0648\u062f\u06cc \u0647\u0627\u06cc \u0642\u062f\u06cc\u0645\u06cc<\/p>\n<\/li>\n<li>\n<p>\u0631\u0627\u0628\u0637 \u0645\u0627\u0646\u0646\u062f \u0641\u0631\u0647\u0646\u06af \u0644\u063a\u062a \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0622\u0633\u0627\u0646<\/p>\n<\/li>\n<li>\n<p>\u0631\u0627\u0646\u062f\u0645\u0627\u0646 \u062d\u0627\u0641\u0638\u0647 \u0628\u0627 \u0627\u0632 \u0628\u06cc\u0646 \u0628\u0631\u062f\u0646 \u0648\u0631\u0648\u062f\u06cc \u0647\u0627\u06cc \u0645\u0646\u0642\u0636\u06cc \u0634\u062f\u0647<\/p>\n<\/li>\n<li>\n<p>\u0639\u0645\u0644\u06cc\u0627\u062a \u0627\u06cc\u0645\u0646 \u0645\u0648\u0636\u0648\u0639 (\u0628\u0627 \u0641\u0631\u0636 \u062f\u0633\u062a\u0631\u0633\u06cc \u062a\u06a9 \u0631\u0634\u062a\u0647 \u0627\u06cc)<\/p>\n<\/li>\n<li>\n<p>\u062a\u0631\u062a\u06cc\u0628 \u062f\u0631\u062c \u0648\u0631\u0648\u062f\u06cc \u0647\u0627 \u0631\u0627 \u062d\u0641\u0638 \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"heading-attribute-access\"><span class=\"ez-toc-section\" id=\"%d8%af%d8%b3%d8%aa%d8%b1%d8%b3%db%8c_%d9%88%db%8c%da%98%da%af%db%8c\"><\/span><strong>\u062f\u0633\u062a\u0631\u0633\u06cc \u0648\u06cc\u0698\u06af\u06cc<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0631\u0648\u0634\u0647\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0631\u0648\u0634 \u06a9\u0646\u062a\u0631\u0644 \u060c \u062a\u0646\u0638\u06cc\u0645 \u0648 \u062d\u0630\u0641 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627 \u0631\u0627 \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u06cc\u062f. \u0627\u06cc\u0646 \u0627\u0645\u0631 \u0628\u0647 \u0648\u06cc\u0698\u0647 \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u060c \u0627\u0639\u062a\u0628\u0627\u0631 \u0633\u0646\u062c\u06cc \u0648 \u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0645\u0641\u06cc\u062f \u0627\u0633\u062a.<\/p>\n<h3 id=\"heading-getattr-and-getattribute\"><span class=\"ez-toc-section\" id=\"getattr_%d9%88_getattribute\"><\/span><strong>getAttr \u0648 getAttribute<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u067e\u0627\u06cc\u062a\u0648\u0646 \u062f\u0648 \u0631\u0648\u0634 \u0628\u0631\u0627\u06cc \u06a9\u0646\u062a\u0631\u0644 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f:<\/p>\n<ol>\n<li>\n<p><code>__getattr__<\/code>: \u0641\u0642\u0637 \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u06cc\u06a9 \u062c\u0633\u062a\u062c\u0648\u06cc \u0648\u06cc\u0698\u06af\u06cc \u0627\u0632 \u0628\u06cc\u0646 \u0645\u06cc \u0631\u0648\u062f \u060c \u0646\u0627\u0645\u06cc\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f (\u06cc\u0639\u0646\u06cc \u0648\u0642\u062a\u06cc \u0648\u06cc\u0698\u06af\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f)<\/p>\n<\/li>\n<li>\n<p><code>__getattribute__<\/code>: \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0647\u0631 \u0648\u06cc\u0698\u06af\u06cc \u060c \u062d\u062a\u06cc \u0628\u0631\u0627\u06cc \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u060c \u062e\u0648\u0627\u0633\u062a\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a<\/p>\n<\/li>\n<\/ol>\n<p>\u062a\u0641\u0627\u0648\u062a \u0627\u0635\u0644\u06cc \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 <code>__getattribute__<\/code> \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u062a\u0645\u0627\u0645 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0645\u06cc \u0634\u0648\u062f <code>__getattr__<\/code> \u0641\u0642\u0637 \u0632\u0645\u0627\u0646\u06cc \u062e\u0648\u0627\u0646\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f \u06a9\u0647 \u0627\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0631\u0648\u0634 \u0639\u0627\u062f\u06cc \u067e\u06cc\u062f\u0627 \u0646\u0634\u0648\u062f.<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9 \u0645\u062b\u0627\u0644 \u0633\u0627\u062f\u0647 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u06a9\u0647 \u062a\u0641\u0627\u0648\u062a \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<pre><code class=\"lang-python\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">AttributeDemo<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span>(<span class=\"hljs-params\">self<\/span>):<\/span>\n        self.name = <span class=\"hljs-string\">\"Vivek\"<\/span>\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__getattr__<\/span>(<span class=\"hljs-params\">self, name<\/span>):<\/span>\n        print(<span class=\"hljs-string\">f\"__getattr__ called for <span class=\"hljs-subst\">{name}<\/span>\"<\/span>)\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">f\"Default value for <span class=\"hljs-subst\">{name}<\/span>\"<\/span>\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__getattribute__<\/span>(<span class=\"hljs-params\">self, name<\/span>):<\/span>\n        print(<span class=\"hljs-string\">f\"__getattribute__ called for <span class=\"hljs-subst\">{name}<\/span>\"<\/span>)\n        <span class=\"hljs-keyword\">return<\/span> super().__getattribute__(name)\n\ndemo = AttributeDemo()\nprint(demo.name)      <span class=\"hljs-comment\"># Output: __getattribute__ called for name<\/span>\n                      <span class=\"hljs-comment\">#        Vivek<\/span>\nprint(demo.age)       <span class=\"hljs-comment\"># Output: __getattribute__ called for age<\/span>\n                      <span class=\"hljs-comment\">#        __getattr__ called for age<\/span>\n                      <span class=\"hljs-comment\">#        Default value for age<\/span>\n<\/code><\/pre>\n<h3 id=\"heading-setattr-and-delattr\"><span class=\"ez-toc-section\" id=\"setattr_%d9%88_delattr\"><\/span><strong>SetATTR \u0648 Delattr<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0647 \u0647\u0645\u06cc\u0646 \u062a\u0631\u062a\u06cc\u0628 \u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0631\u0648\u0634 \u062a\u0646\u0638\u06cc\u0645 \u0648 \u062d\u0630\u0641 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627 \u0631\u0627 \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u06cc\u062f:<\/p>\n<ol>\n<li>\n<p><code>__setattr__<\/code>: \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u06cc\u06a9 \u0648\u06cc\u0698\u06af\u06cc \u062a\u0646\u0638\u06cc\u0645 \u0634\u062f\u0647 \u0627\u0633\u062a<\/p>\n<\/li>\n<li>\n<p><code>__delattr__<\/code>: \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u06cc\u06a9 \u0648\u06cc\u0698\u06af\u06cc \u062d\u0630\u0641 \u0645\u06cc \u0634\u0648\u062f<\/p>\n<\/li>\n<\/ol>\n<p>\u0627\u06cc\u0646 \u0631\u0648\u0634 \u0647\u0627 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0627\u0639\u062a\u0628\u0627\u0631 \u060c \u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645 \u06cc\u0627 \u0631\u0641\u062a\u0627\u0631 \u0633\u0641\u0627\u0631\u0634\u06cc \u0631\u0627 \u0647\u0646\u06af\u0627\u0645 \u0627\u0635\u0644\u0627\u062d \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f.<\/p>\n<h3 id=\"heading-practical-example-auto-logging-properties\"><span class=\"ez-toc-section\" id=\"%d9%85%d8%ab%d8%a7%d9%84_%d8%b9%d9%85%d9%84%db%8c_%d8%ae%d8%b5%d9%88%d8%b5%db%8c%d8%a7%d8%aa_%d8%a7%d8%aa%d8%b5%d8%a7%d9%84_%d8%ae%d9%88%d8%af%da%a9%d8%a7%d8%b1\"><\/span><strong>\u0645\u062b\u0627\u0644 \u0639\u0645\u0644\u06cc: \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u0627\u062a\u0635\u0627\u0644 \u062e\u0648\u062f\u06a9\u0627\u0631<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u06cc\u06a9 \u06a9\u0644\u0627\u0633 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u062a\u0645\u0627\u0645 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062e\u0627\u0635\u06cc\u062a \u0631\u0627 \u062b\u0628\u062a \u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0628\u0631\u0627\u06cc \u0627\u0634\u06a9\u0627\u0644 \u0632\u062f\u0627\u06cc\u06cc \u060c \u062d\u0633\u0627\u0628\u0631\u0633\u06cc \u06cc\u0627 \u0631\u062f\u06cc\u0627\u0628\u06cc \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0648\u0636\u0639\u06cc\u062a \u0634\u06cc\u0621 \u0645\u0641\u06cc\u062f \u0627\u0633\u062a:<\/p>\n<pre><code class=\"lang-python\"><span class=\"hljs-keyword\">import<\/span> logging\n\n<span class=\"hljs-comment\"># Set up logging<\/span>\nlogging.basicConfig(\n    level=logging.INFO,\n    format=<span class=\"hljs-string\">'%(asctime)s - %(levelname)s - %(message)s'<\/span>\n)\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">LoggedObject<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span>(<span class=\"hljs-params\">self, **kwargs<\/span>):<\/span>\n        self._data = {}\n        <span class=\"hljs-comment\"># Initialize attributes without triggering __setattr__<\/span>\n        <span class=\"hljs-keyword\">for<\/span> key, value <span class=\"hljs-keyword\">in<\/span> kwargs.items():\n            self._data[key] = value\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__getattr__<\/span>(<span class=\"hljs-params\">self, name<\/span>):<\/span>\n        <span class=\"hljs-keyword\">if<\/span> name <span class=\"hljs-keyword\">in<\/span> self._data:\n            logging.debug(<span class=\"hljs-string\">f\"Accessing attribute <span class=\"hljs-subst\">{name}<\/span>: <span class=\"hljs-subst\">{self._data[name]}<\/span>\"<\/span>)\n            <span class=\"hljs-keyword\">return<\/span> self._data[name]\n        <span class=\"hljs-keyword\">raise<\/span> AttributeError(<span class=\"hljs-string\">f\"'<span class=\"hljs-subst\">{self.__class__.__name__}<\/span>' object has no attribute '<span class=\"hljs-subst\">{name}<\/span>'\"<\/span>)\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__setattr__<\/span>(<span class=\"hljs-params\">self, name, value<\/span>):<\/span>\n        <span class=\"hljs-keyword\">if<\/span> name == <span class=\"hljs-string\">\"_data\"<\/span>:\n            <span class=\"hljs-comment\"># Allow setting the _data attribute directly<\/span>\n            super().__setattr__(name, value)\n        <span class=\"hljs-keyword\">else<\/span>:\n            old_value = self._data.get(name, <span class=\"hljs-string\">\"&lt;undefined&gt;\"<\/span>)\n            self._data[name] = value\n            logging.info(<span class=\"hljs-string\">f\"Changed <span class=\"hljs-subst\">{name}<\/span>: <span class=\"hljs-subst\">{old_value}<\/span> -&gt; <span class=\"hljs-subst\">{value}<\/span>\"<\/span>)\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__delattr__<\/span>(<span class=\"hljs-params\">self, name<\/span>):<\/span>\n        <span class=\"hljs-keyword\">if<\/span> name <span class=\"hljs-keyword\">in<\/span> self._data:\n            old_value = self._data[name]\n            <span class=\"hljs-keyword\">del<\/span> self._data[name]\n            logging.info(<span class=\"hljs-string\">f\"Deleted <span class=\"hljs-subst\">{name}<\/span> (was: <span class=\"hljs-subst\">{old_value}<\/span>)\"<\/span>)\n        <span class=\"hljs-keyword\">else<\/span>:\n            <span class=\"hljs-keyword\">raise<\/span> AttributeError(<span class=\"hljs-string\">f\"'<span class=\"hljs-subst\">{self.__class__.__name__}<\/span>' object has no attribute '<span class=\"hljs-subst\">{name}<\/span>'\"<\/span>)\n<\/code><\/pre>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0631\u0648\u0634 \u0639\u0645\u0644\u06a9\u0631\u062f \u0627\u06cc\u0646 \u06a9\u0644\u0627\u0633 \u0631\u0627 \u062a\u062c\u0632\u06cc\u0647 \u06a9\u0646\u06cc\u0645:<\/p>\n<ol>\n<li>\n<p><strong>\u0627\u0646\u0628\u0627\u0631\u0647<\/strong>: \u06a9\u0644\u0627\u0633 \u0627\u0632 \u06cc\u06a9 \u062e\u0635\u0648\u0635\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f <code>_data<\/code> \u0641\u0631\u0647\u0646\u06af \u0644\u063a\u062a \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0645\u0642\u0627\u062f\u06cc\u0631 \u0648\u06cc\u0698\u06af\u06cc.<\/p>\n<\/li>\n<li>\n<p><strong>\u062f\u0633\u062a\u0631\u0633\u06cc \u0648\u06cc\u0698\u06af\u06cc<\/strong>:<\/p>\n<ul>\n<li>\n<p><code>__getattr__<\/code>: \u0645\u0642\u0627\u062f\u06cc\u0631 \u0631\u0627 \u0627\u0632 <code>_data<\/code> \u0648 \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc \u0627\u0634\u06a9\u0627\u0644 \u0632\u062f\u0627\u06cc\u06cc \u0631\u0627 \u062b\u0628\u062a \u06a9\u0646\u06cc\u062f<\/p>\n<\/li>\n<li>\n<p><code>__setattr__<\/code>: \u0645\u0642\u0627\u062f\u06cc\u0631 \u0631\u0627 \u062f\u0631 <code>_data<\/code> \u0648 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc \u062f\u0647\u062f<\/p>\n<\/li>\n<li>\n<p><code>__delattr__<\/code>: \u0645\u0642\u0627\u062f\u06cc\u0631 \u0631\u0627 \u0627\u0632 \u0628\u06cc\u0646 \u0645\u06cc \u0628\u0631\u062f <code>_data<\/code> \u0648 \u062d\u0630\u0641 \u06af\u0632\u0627\u0631\u0634 \u0647\u0627<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u062f\u0633\u062a \u0632\u062f\u0646 \u0628\u0647<\/strong>: <code>_data<\/code> \u062e\u0648\u062f \u0648\u06cc\u0698\u06af\u06cc \u0628\u0631\u0627\u06cc \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u0628\u0627\u0632\u06af\u0634\u062a \u0628\u06cc \u0646\u0647\u0627\u06cc\u062a \u0628\u0647 \u0637\u0648\u0631 \u0645\u062a\u0641\u0627\u0648\u062a\u06cc \u0627\u062f\u0627\u0631\u0647 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<\/li>\n<\/ol>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0631\u0648\u0634 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u0644\u0627\u0633 \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<pre><code class=\"lang-python\"><span class=\"hljs-comment\"># Create a logged object with initial values<\/span>\nuser = LoggedObject(name=<span class=\"hljs-string\">\"Vivek\"<\/span>, email=<span class=\"hljs-string\">\"hello@wewake.dev\"<\/span>)\n\n<span class=\"hljs-comment\"># Modify attributes<\/span>\nuser.name = <span class=\"hljs-string\">\"Vivek\"<\/span>  <span class=\"hljs-comment\"># Logs: Changed name: Vivek -&gt; Vivek<\/span>\nuser.age = <span class=\"hljs-number\">30<\/span>         <span class=\"hljs-comment\"># Logs: Changed age: &lt;undefined&gt; -&gt; 30<\/span>\n\n<span class=\"hljs-comment\"># Access attributes<\/span>\nprint(user.name)      <span class=\"hljs-comment\"># Output: Vivek<\/span>\n\n<span class=\"hljs-comment\"># Delete attributes<\/span>\n<span class=\"hljs-keyword\">del<\/span> user.email        <span class=\"hljs-comment\"># Logs: Deleted email (was: hello@wewake.dev)<\/span>\n\n<span class=\"hljs-comment\"># Try to access deleted attribute<\/span>\n<span class=\"hljs-keyword\">try<\/span>:\n    print(user.email)\n<span class=\"hljs-keyword\">except<\/span> AttributeError <span class=\"hljs-keyword\">as<\/span> e:\n    print(<span class=\"hljs-string\">f\"AttributeError: <span class=\"hljs-subst\">{e}<\/span>\"<\/span>)  <span class=\"hljs-comment\"># Output: AttributeError: 'LoggedObject' object has no attribute 'email'<\/span>\n<\/code><\/pre>\n<p>\u0627\u06cc\u0646 \u0627\u062c\u0631\u0627\u06cc \u0645\u0632\u0627\u06cc\u0627\u06cc \u0645\u062e\u062a\u0644\u0641\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<ol>\n<li>\n<p>\u0648\u0631\u0648\u062f \u062e\u0648\u062f\u06a9\u0627\u0631 \u0647\u0645\u0647 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0648\u06cc\u0698\u06af\u06cc<\/p>\n<\/li>\n<li>\n<p>\u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u0637\u062d \u0627\u0634\u06a9\u0627\u0644 \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0648\u06cc\u0698\u06af\u06cc<\/p>\n<\/li>\n<li>\n<p>\u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc \u062e\u0637\u0627 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u06af\u0645\u0634\u062f\u0647 \u067e\u0627\u06a9 \u06a9\u0646\u06cc\u062f<\/p>\n<\/li>\n<li>\n<p>\u0631\u062f\u06cc\u0627\u0628\u06cc \u0622\u0633\u0627\u0646 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062d\u0627\u0644\u062a \u0634\u06cc<\/p>\n<\/li>\n<li>\n<p>\u0628\u0631\u0627\u06cc \u0627\u0634\u06a9\u0627\u0644 \u0632\u062f\u0627\u06cc\u06cc \u0648 \u062d\u0633\u0627\u0628\u0631\u0633\u06cc \u0645\u0641\u06cc\u062f \u0627\u0633\u062a<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"heading-context-managers\"><span class=\"ez-toc-section\" id=\"%d9%85%d8%af%db%8c%d8%b1%d8%a7%d9%86_%d9%85%d8%aa%d9%86\"><\/span><strong>\u0645\u062f\u06cc\u0631\u0627\u0646 \u0645\u062a\u0646<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0645\u062f\u06cc\u0631\u0627\u0646 \u0632\u0645\u06cc\u0646\u0647 \u06cc\u06a9 \u0648\u06cc\u0698\u06af\u06cc \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u062f\u0631 \u067e\u0627\u06cc\u062a\u0648\u0646 \u0647\u0633\u062a\u0646\u062f \u06a9\u0647 \u0628\u0647 \u0634\u0645\u0627 \u062f\u0631 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0635\u062d\u06cc\u062d \u0645\u0646\u0627\u0628\u0639 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f. \u0622\u0646\u0647\u0627 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u0645\u06cc \u062f\u0647\u0646\u062f \u06a9\u0647 \u0645\u0646\u0627\u0628\u0639 \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u0628\u0647 \u062f\u0633\u062a \u0622\u0645\u062f\u0647 \u0648 \u0622\u0632\u0627\u062f \u0634\u062f\u0647 \u0627\u0646\u062f \u060c \u062d\u062a\u06cc \u0627\u06af\u0631 \u062e\u0637\u0627\u06cc\u06cc \u0631\u062e \u062f\u0647\u062f. \u062f\u0631 <code>with<\/code> \u0628\u06cc\u0627\u0646\u06cc\u0647 \u0645\u062a\u062f\u0627\u0648\u0644 \u062a\u0631\u06cc\u0646 \u0631\u0648\u0634 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0645\u062f\u06cc\u0631\u0627\u0646 \u0632\u0645\u06cc\u0646\u0647 \u0627\u0633\u062a.<\/p>\n<h3 id=\"heading-enter-and-exit\"><span class=\"ez-toc-section\" id=\"%d9%88%d8%a7%d8%b1%d8%af_%d9%88_%d8%ae%d8%b1%d9%88%d8%ac_%d8%b4%d9%88%db%8c%d8%af\"><\/span><strong>\u0648\u0627\u0631\u062f \u0648 \u062e\u0631\u0648\u062c \u0634\u0648\u06cc\u062f<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0645\u062f\u06cc\u0631 \u0632\u0645\u06cc\u0646\u0647 \u060c \u0634\u0645\u0627 \u0628\u0627\u06cc\u062f \u062f\u0648 \u0631\u0648\u0634 \u062c\u0627\u062f\u0648\u06cc\u06cc \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f:<\/p>\n<ol>\n<li>\n<p><code>__enter__<\/code>: \u0647\u0646\u06af\u0627\u0645 \u0648\u0631\u0648\u062f \u0628\u0647 <code>with<\/code> \u0628\u0644\u0648\u06a9 \u0627\u06cc\u0646 \u0628\u0627\u06cc\u062f \u0645\u0646\u0628\u0639 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u062f.<\/p>\n<\/li>\n<li>\n<p><code>__exit__<\/code>: \u0647\u0646\u06af\u0627\u0645 \u062e\u0631\u0648\u062c \u0627\u0632 <code>with<\/code> \u0628\u0644\u0648\u06a9 \u060c \u062d\u062a\u06cc \u0627\u06af\u0631 \u06cc\u06a9 \u0627\u0633\u062a\u062b\u0646\u0627 \u0631\u062e \u062f\u0647\u062f. \u0628\u0627\u06cc\u062f \u067e\u0627\u06a9\u0633\u0627\u0632\u06cc \u0631\u0627 \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u062f.<\/p>\n<\/li>\n<\/ol>\n<p>\u062f\u0631 <code>__exit__<\/code> \u0631\u0648\u0634 \u0633\u0647 \u0627\u0633\u062a\u062f\u0644\u0627\u0644 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc \u06a9\u0646\u062f:<\/p>\n<ul>\n<li>\n<p><code>exc_type<\/code>: \u0646\u0648\u0639 \u0627\u0633\u062a\u062b\u0646\u0627 (\u062f\u0631 \u0635\u0648\u0631\u062a \u0648\u062c\u0648\u062f)<\/p>\n<\/li>\n<li>\n<p><code>exc_val<\/code>: \u0646\u0645\u0648\u0646\u0647 \u0627\u0633\u062a\u062b\u0646\u0627 (\u062f\u0631 \u0635\u0648\u0631\u062a \u0648\u062c\u0648\u062f)<\/p>\n<\/li>\n<li>\n<p><code>exc_tb<\/code>: Traceback (\u062f\u0631 \u0635\u0648\u0631\u062a \u0648\u062c\u0648\u062f)<\/p>\n<\/li>\n<\/ul>\n<h3 id=\"heading-practical-example-database-connection-manager\"><span class=\"ez-toc-section\" id=\"%d9%85%d8%ab%d8%a7%d9%84_%d8%b9%d9%85%d9%84%db%8c_%d9%85%d8%af%db%8c%d8%b1_%d8%a7%d8%aa%d8%b5%d8%a7%d9%84_%d9%be%d8%a7%db%8c%da%af%d8%a7%d9%87_%d8%af%d8%a7%d8%af%d9%87\"><\/span><strong>\u0645\u062b\u0627\u0644 \u0639\u0645\u0644\u06cc: \u0645\u062f\u06cc\u0631 \u0627\u062a\u0635\u0627\u0644 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u06cc\u06a9 \u0645\u062f\u06cc\u0631 \u0632\u0645\u06cc\u0646\u0647 \u0628\u0631\u0627\u06cc \u0627\u062a\u0635\u0627\u0644\u0627\u062a \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645. \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644 \u0631\u0648\u0634 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0635\u062d\u06cc\u062d \u0645\u0646\u0627\u0628\u0639 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0648 \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u0645\u0639\u0627\u0645\u0644\u0627\u062a \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<pre><code class=\"lang-python\"><span class=\"hljs-keyword\">import<\/span> sqlite3\n<span class=\"hljs-keyword\">import<\/span> logging\n\n<span class=\"hljs-comment\"># Set up logging<\/span>\nlogging.basicConfig(\n    level=logging.INFO,\n    format=<span class=\"hljs-string\">'%(asctime)s - %(levelname)s - %(message)s'<\/span>\n)\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">DatabaseConnection<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span>(<span class=\"hljs-params\">self, db_path<\/span>):<\/span>\n        self.db_path = db_path\n        self.connection = <span class=\"hljs-literal\">None<\/span>\n        self.cursor = <span class=\"hljs-literal\">None<\/span>\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__enter__<\/span>(<span class=\"hljs-params\">self<\/span>):<\/span>\n        logging.info(<span class=\"hljs-string\">f\"Connecting to database: <span class=\"hljs-subst\">{self.db_path}<\/span>\"<\/span>)\n        self.connection = sqlite3.connect(self.db_path)\n        self.cursor = self.connection.cursor()\n        <span class=\"hljs-keyword\">return<\/span> self.cursor\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__exit__<\/span>(<span class=\"hljs-params\">self, exc_type, exc_val, exc_tb<\/span>):<\/span>\n        <span class=\"hljs-keyword\">if<\/span> exc_type <span class=\"hljs-keyword\">is<\/span> <span class=\"hljs-keyword\">not<\/span> <span class=\"hljs-literal\">None<\/span>:\n            logging.error(<span class=\"hljs-string\">f\"An error occurred: <span class=\"hljs-subst\">{exc_val}<\/span>\"<\/span>)\n            self.connection.rollback()\n            logging.info(<span class=\"hljs-string\">\"Transaction rolled back\"<\/span>)\n        <span class=\"hljs-keyword\">else<\/span>:\n            self.connection.commit()\n            logging.info(<span class=\"hljs-string\">\"Transaction committed\"<\/span>)\n\n        <span class=\"hljs-keyword\">if<\/span> self.cursor:\n            self.cursor.close()\n        <span class=\"hljs-keyword\">if<\/span> self.connection:\n            self.connection.close()\n\n        logging.info(<span class=\"hljs-string\">\"Database connection closed\"<\/span>)\n\n        <span class=\"hljs-comment\"># Return False to propagate exceptions, True to suppress them<\/span>\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-literal\">False<\/span>\n<\/code><\/pre>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0631\u0648\u0634 \u0639\u0645\u0644\u06a9\u0631\u062f \u0627\u06cc\u0646 \u0645\u062f\u06cc\u0631 \u0645\u062a\u0646 \u0631\u0627 \u062a\u062c\u0632\u06cc\u0647 \u06a9\u0646\u06cc\u0645:<\/p>\n<ol>\n<li>\n<p><strong>\u0634\u0631\u0648\u0639<\/strong>:<\/p>\n<ul>\n<li>\n<p>\u06a9\u0644\u0627\u0633 \u06cc\u06a9 \u0645\u0633\u06cc\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0631\u0627 \u0637\u06cc \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<li>\n<p>\u0627\u062a\u0635\u0627\u0644 \u0648 \u0645\u06a9\u0627\u0646 \u0646\u0645\u0627 \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0647\u06cc\u0686 \u06cc\u06a9 \u0627\u0632 \u0622\u0646\u0647\u0627 \u0622\u063a\u0627\u0632 \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0631\u0648\u0634 \u0648\u0627\u0631\u062f \u06a9\u0631\u062f\u0646<\/strong>:<\/p>\n<ul>\n<li>\n<p>\u0627\u062a\u0635\u0627\u0644 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<li>\n<p>\u06cc\u06a9 \u0645\u06a9\u0627\u0646 \u0646\u0645\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<li>\n<p>\u0645\u06a9\u0627\u0646 \u0646\u0645\u0627 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062f\u0631 <code>with<\/code> \u0645\u062d\u0627\u0635\u0631\u0647 \u06a9\u0631\u062f\u0646<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0631\u0648\u0634 \u062e\u0631\u0648\u062c<\/strong>:<\/p>\n<ul>\n<li>\n<p>\u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u0639\u0627\u0645\u0644\u0647 (\u062a\u0639\u0647\u062f\/\u0628\u0627\u0632\u06af\u0634\u062a)<\/p>\n<\/li>\n<li>\n<p>\u0645\u06a9\u0627\u0646 \u0646\u0645\u0627 \u0648 \u0627\u062a\u0635\u0627\u0644 \u0631\u0627 \u0645\u06cc \u0628\u0646\u062f\u062f<\/p>\n<\/li>\n<li>\n<p>\u0647\u0645\u0647 \u0639\u0645\u0644\u06cc\u0627\u062a \u0631\u0627 \u062b\u0628\u062a \u06a9\u0646\u06cc\u062f<\/p>\n<\/li>\n<li>\n<p>\u0628\u0647 \u0627\u0633\u062a\u062b\u0646\u0627\u0626\u0627\u062a \u062f\u0631\u0648\u063a \u0645\u06cc \u06af\u0648\u06cc\u062f<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0631\u0648\u0634 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0645\u062f\u06cc\u0631 \u0632\u0645\u06cc\u0646\u0647 \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<pre><code class=\"lang-python\"><span class=\"hljs-comment\"># Create a test database in memory<\/span>\n<span class=\"hljs-keyword\">try<\/span>:\n    <span class=\"hljs-comment\"># Successful transaction<\/span>\n    <span class=\"hljs-keyword\">with<\/span> DatabaseConnection(<span class=\"hljs-string\">\":memory:\"<\/span>) <span class=\"hljs-keyword\">as<\/span> cursor:\n        <span class=\"hljs-comment\"># Create a table<\/span>\n        cursor.execute(<span class=\"hljs-string\">\"\"\"\n            CREATE TABLE users (\n                id INTEGER PRIMARY KEY,\n                name TEXT,\n                email TEXT\n            )\n        \"\"\"<\/span>)\n\n        <span class=\"hljs-comment\"># Insert data<\/span>\n        cursor.execute(\n            <span class=\"hljs-string\">\"INSERT INTO users (name, email) VALUES (?, ?)\"<\/span>,\n            (<span class=\"hljs-string\">\"Vivek\"<\/span>, <span class=\"hljs-string\">\"hello@wewake.dev\"<\/span>)\n        )\n\n        <span class=\"hljs-comment\"># Query data<\/span>\n        cursor.execute(<span class=\"hljs-string\">\"SELECT * FROM users\"<\/span>)\n        print(cursor.fetchall())  <span class=\"hljs-comment\"># Output: [(1, 'Vivek', 'hello@wewake.dev')]<\/span>\n\n    <span class=\"hljs-comment\"># Demonstrate transaction rollback \u0631\u0648\u06cc error<\/span>\n    <span class=\"hljs-keyword\">with<\/span> DatabaseConnection(<span class=\"hljs-string\">\":memory:\"<\/span>) <span class=\"hljs-keyword\">as<\/span> cursor:\n        cursor.execute(<span class=\"hljs-string\">\"\"\"\n            CREATE TABLE users (\n                id INTEGER PRIMARY KEY,\n                name TEXT,\n                email TEXT\n            )\n        \"\"\"<\/span>)\n        cursor.execute(\n            <span class=\"hljs-string\">\"INSERT INTO users (name, email) VALUES (?, ?)\"<\/span>,\n            (<span class=\"hljs-string\">\"Wewake\"<\/span>, <span class=\"hljs-string\">\"contact@wewake.dev\"<\/span>)\n        )\n        <span class=\"hljs-comment\"># This will cause an error - table 'nonexistent' doesn't exist<\/span>\n        cursor.execute(<span class=\"hljs-string\">\"SELECT * FROM nonexistent\"<\/span>)\n<span class=\"hljs-keyword\">except<\/span> sqlite3.OperationalError <span class=\"hljs-keyword\">as<\/span> e:\n    print(<span class=\"hljs-string\">f\"Caught exception: <span class=\"hljs-subst\">{e}<\/span>\"<\/span>)\n<\/code><\/pre>\n<p>\u0627\u06cc\u0646 \u0645\u062f\u06cc\u0631 \u0632\u0645\u06cc\u0646\u0647 \u0645\u0632\u0627\u06cc\u0627\u06cc \u0645\u062e\u062a\u0644\u0641\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<ol>\n<li>\n<p>\u0645\u0646\u0627\u0628\u0639 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc \u0634\u0648\u0646\u062f (\u0645\u062b\u0627\u0644: \u0627\u062a\u0635\u0627\u0644\u0627\u062a \u0647\u0645\u06cc\u0634\u0647 \u0628\u0633\u062a\u0647 \u0647\u0633\u062a\u0646\u062f).<\/p>\n<\/li>\n<li>\n<p>\u0628\u0627 \u0627\u06cc\u0645\u0646\u06cc \u0645\u0639\u0627\u0645\u0644\u0647 \u060c \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0645\u062a\u0639\u0647\u062f \u0634\u062f\u0647 \u06cc\u0627 \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<\/li>\n<li>\n<p>\u0627\u0633\u062a\u062b\u0646\u0627\u0626\u0627\u062a \u0628\u0627 \u0644\u0637\u0641 \u06af\u0631\u0641\u062a\u0627\u0631 \u0648 \u0631\u0633\u06cc\u062f\u06af\u06cc \u0645\u06cc \u0634\u0648\u0646\u062f<\/p>\n<\/li>\n<li>\n<p>\u0647\u0645\u0647 \u0639\u0645\u0644\u06cc\u0627\u062a \u0628\u0631\u0627\u06cc \u0627\u0634\u06a9\u0627\u0644 \u0632\u062f\u0627\u06cc\u06cc \u0648\u0627\u0631\u062f \u0634\u062f\u0647 \u0627\u0646\u062f<\/p>\n<\/li>\n<li>\n<p>\u062f\u0631 <code>with<\/code> \u0628\u06cc\u0627\u0646\u06cc\u0647 \u06a9\u062f \u0631\u0627 \u0631\u0648\u0634\u0646 \u0648 \u0645\u062e\u062a\u0635\u0631 \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"heading-callable-objects\"><span class=\"ez-toc-section\" id=\"%d8%a7%d8%b4%db%8c%d8%a7%d8%a1_%d9%82%d8%a7%d8%a8%d9%84_%d8%aa%d9%85%d8%a7%d8%b3\"><\/span><strong>\u0627\u0634\u06cc\u0627\u0621 \u0642\u0627\u0628\u0644 \u062a\u0645\u0627\u0633<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 <code>__call__<\/code> \u0631\u0648\u0634 \u062c\u0627\u062f\u0648\u06cc\u06cc \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0646\u0645\u0648\u0646\u0647 \u0647\u0627\u06cc\u06cc \u0627\u0632 \u06a9\u0644\u0627\u0633 \u062e\u0648\u062f \u0645\u0627\u0646\u0646\u062f \u062a\u0648\u0627\u0628\u0639 \u0631\u0641\u062a\u0627\u0631 \u06a9\u0646\u06cc\u062f. \u0627\u06cc\u0646 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0627\u0634\u06cc\u0627\u0621 \u06a9\u0647 \u062d\u0627\u0644\u062a \u0628\u06cc\u0646 \u062a\u0645\u0627\u0633 \u0647\u0627 \u06cc\u0627 \u0627\u062c\u0631\u0627\u06cc \u0631\u0641\u062a\u0627\u0631 \u0639\u0645\u0644\u06a9\u0631\u062f\u06cc \u0645\u0627\u0646\u0646\u062f \u0628\u0627 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0627\u0636\u0627\u0641\u06cc \u0631\u0627 \u062d\u0641\u0638 \u0645\u06cc \u06a9\u0646\u0646\u062f \u060c \u0645\u0641\u06cc\u062f \u0627\u0633\u062a.<\/p>\n<h3 id=\"heading-call\"><span class=\"ez-toc-section\" id=\"%d9%81%d8%b1%d8%a7%d8%ae%d9%88%d8%a7%d9%86%db%8c\"><\/span><strong>\u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u062f\u0631 <code>__call__<\/code> \u0648\u0642\u062a\u06cc \u0633\u0639\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u062f \u0646\u0645\u0648\u0646\u0647 \u0627\u06cc \u0627\u0632 \u06a9\u0644\u0627\u0633 \u062e\u0648\u062f \u0631\u0627 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u06a9\u0646\u06cc\u062f \u060c \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0639\u0645\u0644\u06a9\u0631\u062f \u060c \u0631\u0648\u0634 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0645\u06cc \u0634\u0648\u062f. \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9 \u0645\u062b\u0627\u0644 \u0633\u0627\u062f\u0647 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f:<\/p>\n<pre><code class=\"lang-python\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Multiplier<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span>(<span class=\"hljs-params\">self, factor<\/span>):<\/span>\n        self.factor = factor\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__call__<\/span>(<span class=\"hljs-params\">self, x<\/span>):<\/span>\n        <span class=\"hljs-keyword\">return<\/span> x * self.factor\n\n<span class=\"hljs-comment\"># Create instances that behave like functions<\/span>\ndouble = Multiplier(<span class=\"hljs-number\">2<\/span>)\ntriple = Multiplier(<span class=\"hljs-number\">3<\/span>)\n\nprint(double(<span class=\"hljs-number\">5<\/span>))  <span class=\"hljs-comment\"># Output: 10<\/span>\nprint(triple(<span class=\"hljs-number\">5<\/span>))  <span class=\"hljs-comment\"># Output: 15<\/span>\n<\/code><\/pre>\n<p>\u0627\u06cc\u0646 \u0645\u062b\u0627\u0644 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 <code>__call__<\/code> \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0645\u0627\u0646\u0646\u062f \u062a\u0648\u0627\u0628\u0639 \u0642\u0627\u0628\u0644 \u062a\u0645\u0627\u0633 \u0647\u0633\u062a\u0646\u062f \u060c \u0627\u0634\u06cc\u0627\u0621 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u062d\u0627\u0644\u062a (\u0639\u0627\u0645\u0644) \u0631\u0627 \u062d\u0641\u0638 \u06a9\u0646\u0646\u062f.<\/p>\n<h3 id=\"heading-practical-example-memoization-decorator\"><span class=\"ez-toc-section\" id=\"%d9%85%d8%ab%d8%a7%d9%84_%d8%b9%d9%85%d9%84%db%8c_%d8%af%da%a9%d9%88%d8%b1%d8%a7%d8%aa%d9%88%d8%b1_%db%8c%d8%a7%d8%af%d8%a2%d9%88%d8%b1%db%8c\"><\/span><strong>\u0645\u062b\u0627\u0644 \u0639\u0645\u0644\u06cc: \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631 \u06cc\u0627\u062f\u0622\u0648\u0631\u06cc<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631 Memoization \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u0645 <code>__call__<\/code>\u0628\u0634\u0631 \u0627\u06cc\u0646 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631 \u0628\u0631\u0627\u06cc \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u0645\u062d\u0627\u0633\u0628\u0627\u062a \u0627\u0636\u0627\u0641\u06cc \u060c \u0646\u062a\u0627\u06cc\u062c \u0639\u0645\u0644\u06a9\u0631\u062f \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 \u0631\u0627 \u062e\u0648\u0627\u0647\u062f \u062f\u0627\u0634\u062a:<\/p>\n<pre><code class=\"lang-python\"><span class=\"hljs-keyword\">import<\/span> time\n<span class=\"hljs-keyword\">import<\/span> functools\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Memoize<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span>(<span class=\"hljs-params\">self, func<\/span>):<\/span>\n        self.func = func\n        self.cache = {}\n        <span class=\"hljs-comment\"># Preserve function metadata (name, docstring, etc.)<\/span>\n        functools.update_wrapper(self, func)\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__call__<\/span>(<span class=\"hljs-params\">self, *args, **kwargs<\/span>):<\/span>\n        <span class=\"hljs-comment\"># Create a key from the arguments<\/span>\n        <span class=\"hljs-comment\"># For simplicity, we assume all arguments are hashable<\/span>\n        key = str(args) + str(sorted(kwargs.items()))\n\n        <span class=\"hljs-keyword\">if<\/span> key <span class=\"hljs-keyword\">not<\/span> <span class=\"hljs-keyword\">in<\/span> self.cache:\n            self.cache[key] = self.func(*args, **kwargs)\n\n        <span class=\"hljs-keyword\">return<\/span> self.cache[key]\n\n<span class=\"hljs-comment\"># Usage<\/span>\n<span class=\"hljs-meta\">@Memoize<\/span>\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">fibonacci<\/span>(<span class=\"hljs-params\">n<\/span>):<\/span>\n    <span class=\"hljs-string\">\"\"\"Calculate the nth Fibonacci number recursively.\"\"\"<\/span>\n    <span class=\"hljs-keyword\">if<\/span> n &lt;= <span class=\"hljs-number\">1<\/span>:\n        <span class=\"hljs-keyword\">return<\/span> n\n    <span class=\"hljs-keyword\">return<\/span> fibonacci(n<span class=\"hljs-number\">-1<\/span>) + fibonacci(n<span class=\"hljs-number\">-2<\/span>)\n\n<span class=\"hljs-comment\"># Measure execution time<\/span>\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">time_execution<\/span>(<span class=\"hljs-params\">func, *args, **kwargs<\/span>):<\/span>\n    start = time.time()\n    result = func(*args, **kwargs)\n    end = time.time()\n    print(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{func.__name__}<\/span>(<span class=\"hljs-subst\">{args}<\/span>, <span class=\"hljs-subst\">{kwargs}<\/span>) took <span class=\"hljs-subst\">{end - start:<span class=\"hljs-number\">.6<\/span>f}<\/span> seconds\"<\/span>)\n    <span class=\"hljs-keyword\">return<\/span> result\n\n<span class=\"hljs-comment\"># Without memoization, this would be extremely slow<\/span>\nprint(<span class=\"hljs-string\">\"Calculating fibonacci(35)...\"<\/span>)\nresult = time_execution(fibonacci, <span class=\"hljs-number\">35<\/span>)\nprint(<span class=\"hljs-string\">f\"Result: <span class=\"hljs-subst\">{result}<\/span>\"<\/span>)\n\n<span class=\"hljs-comment\"># Second call is instant due to memoization<\/span>\nprint(<span class=\"hljs-string\">\"\\nCalculating fibonacci(35) again...\"<\/span>)\nresult = time_execution(fibonacci, <span class=\"hljs-number\">35<\/span>)\nprint(<span class=\"hljs-string\">f\"Result: <span class=\"hljs-subst\">{result}<\/span>\"<\/span>)\n<\/code><\/pre>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0631\u0648\u0634 \u0639\u0645\u0644\u06a9\u0631\u062f \u0627\u06cc\u0646 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631 Memoization \u0631\u0627 \u062a\u062c\u0632\u06cc\u0647 \u06a9\u0646\u06cc\u0645:<\/p>\n<ol>\n<li>\n<p><strong>\u0634\u0631\u0648\u0639<\/strong>:<\/p>\n<ul>\n<li>\n<p>\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u0639\u0645\u0644\u06a9\u0631\u062f\u06cc \u0645\u06cc \u06af\u06cc\u0631\u062f<\/p>\n<\/li>\n<li>\n<p>\u06cc\u06a9 \u0641\u0631\u0647\u0646\u06af \u0644\u063a\u062a \u062d\u0627\u0641\u0638\u0647 \u0646\u0647\u0627\u0646 \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0646\u062a\u0627\u06cc\u062c \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<li>\n<p>\u0627\u0628\u0631\u062f\u0627\u062f\u0647 \u0639\u0645\u0644\u06a9\u0631\u062f \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646 \u062d\u0641\u0638 \u0645\u06cc \u06a9\u0646\u062f <code>functools.update_wrapper<\/code><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0631\u0648\u0634 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc<\/strong>:<\/p>\n<ul>\n<li>\n<p>\u06cc\u06a9 \u06a9\u0644\u06cc\u062f \u0645\u0646\u062d\u0635\u0631 \u0628\u0647 \u0641\u0631\u062f \u0627\u0632 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u0647\u0627\u06cc \u0639\u0645\u0644\u06a9\u0631\u062f \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<li>\n<p>\u0627\u06af\u0631 \u0646\u062a\u06cc\u062c\u0647 \u062f\u0631 \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 \u0628\u0627\u0634\u062f \u060c \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<li>\n<p>\u0627\u06af\u0631 \u0627\u06cc\u0646\u0637\u0648\u0631 \u0646\u06cc\u0633\u062a \u060c \u0646\u062a\u06cc\u062c\u0647 \u0631\u0627 \u0645\u062d\u0627\u0633\u0628\u0647 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<li>\n<p>\u0646\u062a\u06cc\u062c\u0647 \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0647 \u0631\u0627 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0627\u0633\u062a\u0641\u0627\u062f\u0647<\/strong>:<\/p>\n<ul>\n<li>\n<p>\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631 \u0628\u0631\u0627\u06cc \u0647\u0631 \u0639\u0645\u0644\u06a9\u0631\u062f\u06cc \u0627\u0639\u0645\u0627\u0644 \u0645\u06cc \u0634\u0648\u062f<\/p>\n<\/li>\n<li>\n<p>\u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0646\u062a\u0627\u06cc\u062c \u062a\u0645\u0627\u0633 \u0647\u0627\u06cc \u0645\u06a9\u0631\u0631 \u0631\u0627 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<li>\n<p>\u0639\u0645\u0644\u06a9\u0631\u062f \u0627\u0628\u0631\u062f\u0627\u062f\u0647 \u0648 \u0631\u0641\u062a\u0627\u0631 \u0631\u0627 \u062d\u0641\u0638 \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\u0645\u0632\u0627\u06cc\u0627\u06cc \u0627\u06cc\u0646 \u0627\u062c\u0631\u0627\u06cc \u0634\u0627\u0645\u0644 \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0627\u0633\u062a:<\/p>\n<ol>\n<li>\n<p>\u0639\u0645\u0644\u06a9\u0631\u062f \u0628\u0647\u062a\u0631 \u060c \u0632\u06cc\u0631\u0627 \u0627\u0632 \u0645\u062d\u0627\u0633\u0628\u0627\u062a \u0627\u0636\u0627\u0641\u06cc \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<li>\n<p>\u0628\u0647\u062a\u0631 \u060c \u0634\u0641\u0627\u0641\u06cc\u062a \u060c \u0632\u06cc\u0631\u0627 \u0628\u062f\u0648\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0639\u0645\u0644\u06a9\u0631\u062f \u0627\u0635\u0644\u06cc \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<li>\n<p>\u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631 \u0627\u0633\u062a \u0648 \u0628\u0627 \u0647\u0631 \u0639\u0645\u0644\u06a9\u0631\u062f \u0642\u0627\u0628\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0633\u062a<\/p>\n<\/li>\n<li>\n<p>\u0627\u06cc\u0646 \u062d\u0627\u0641\u0638\u0647 \u06a9\u0627\u0631\u0622\u0645\u062f \u0627\u0633\u062a \u0648 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062c\u062f\u062f \u0646\u062a\u0627\u06cc\u062c \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u0634\u0648\u062f<\/p>\n<\/li>\n<li>\n<p>\u0627\u06cc\u0646 \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0639\u0645\u0644\u06a9\u0631\u062f \u0631\u0627 \u062d\u0641\u0638 \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"heading-advanced-magic-methods\"><span class=\"ez-toc-section\" id=\"%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c_%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c_%d9%be%db%8c%d8%b4%d8%b1%d9%81%d8%aa%d9%87\"><\/span><strong>\u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u067e\u06cc\u0634\u0631\u0641\u062a\u0647<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062d\u0627\u0644 \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0631\u062e\u06cc \u0627\u0632 \u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u067e\u06cc\u0634\u0631\u0641\u062a\u0647 \u062a\u0631 \u067e\u0627\u06cc\u062a\u0648\u0646 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u0645. \u0627\u06cc\u0646 \u0631\u0648\u0634\u0647\u0627 \u06a9\u0646\u062a\u0631\u0644 \u0631\u06cc\u0632 \u0648 \u062f\u0631\u0634\u062a \u0628\u0631 \u0627\u06cc\u062c\u0627\u062f \u0634\u06cc \u060c \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062d\u0627\u0641\u0638\u0647 \u0648 \u0631\u0641\u062a\u0627\u0631 \u0641\u0631\u0647\u0646\u06af \u0644\u063a\u062a \u0631\u0627 \u0628\u0647 \u0634\u0645\u0627 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<h3 id=\"heading-new-for-object-creation\"><span class=\"ez-toc-section\" id=\"%d8%ac%d8%af%db%8c%d8%af_%d8%a8%d8%b1%d8%a7%db%8c_%d8%a7%db%8c%d8%ac%d8%a7%d8%af_%d8%b4%db%8c%d8%a1\"><\/span><strong>\u062c\u062f\u06cc\u062f \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0634\u06cc\u0621<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u062f\u0631 <code>__new__<\/code> \u0631\u0648\u0634 \u0642\u0628\u0644\u0627\u064b \u062e\u0648\u0627\u0646\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f <code>__init__<\/code> \u0648 \u0645\u0633\u0626\u0648\u0644 \u0627\u06cc\u062c\u0627\u062f \u0648 \u0628\u0627\u0632\u06af\u0631\u062f\u0627\u0646\u062f\u0646 \u0646\u0645\u0648\u0646\u0647 \u062c\u062f\u06cc\u062f\u06cc \u0627\u0632 \u06a9\u0644\u0627\u0633 \u0627\u0633\u062a. \u0627\u06cc\u0646 \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u0627\u0644\u06af\u0648\u0647\u0627\u06cc \u0645\u0627\u0646\u0646\u062f \u0645\u062c\u0631\u062f \u06cc\u0627 \u0627\u0634\u06cc\u0627\u0621 \u062a\u063a\u06cc\u06cc\u0631 \u0646\u0627\u067e\u0630\u06cc\u0631 \u0645\u0641\u06cc\u062f \u0627\u0633\u062a.<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u0645\u0648\u0646\u0647 \u0627\u06cc \u0627\u0632 \u0627\u0644\u06af\u0648\u06cc \u062a\u06a9 \u0622\u0647\u0646\u06af \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a <code>__new__<\/code>:<\/p>\n<pre><code class=\"lang-python\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Singleton<\/span>:<\/span>\n    _instance = <span class=\"hljs-literal\">None<\/span>\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__new__<\/span>(<span class=\"hljs-params\">cls, *args, **kwargs<\/span>):<\/span>\n        <span class=\"hljs-keyword\">if<\/span> cls._instance <span class=\"hljs-keyword\">is<\/span> <span class=\"hljs-literal\">None<\/span>:\n            cls._instance = super().__new__(cls)\n        <span class=\"hljs-keyword\">return<\/span> cls._instance\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span>(<span class=\"hljs-params\">self, name=None<\/span>):<\/span>\n        <span class=\"hljs-comment\"># This will be called every time Singleton() is called<\/span>\n        <span class=\"hljs-keyword\">if<\/span> name <span class=\"hljs-keyword\">is<\/span> <span class=\"hljs-keyword\">not<\/span> <span class=\"hljs-literal\">None<\/span>:\n            self.name = name\n\n<span class=\"hljs-comment\"># Usage<\/span>\ns1 = Singleton(<span class=\"hljs-string\">\"Vivek\"<\/span>)\ns2 = Singleton(<span class=\"hljs-string\">\"Wewake\"<\/span>)\nprint(s1 <span class=\"hljs-keyword\">is<\/span> s2)  <span class=\"hljs-comment\"># Output: True<\/span>\nprint(s1.name)   <span class=\"hljs-comment\"># Output: Wewake (the second initialization overwrote the first)<\/span>\n<\/code><\/pre>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0631\u0648\u0634 \u0639\u0645\u0644\u06a9\u0631\u062f \u0627\u06cc\u0646 \u062a\u06a9 \u0622\u0647\u0646\u06af \u0631\u0627 \u062a\u062c\u0632\u06cc\u0647 \u06a9\u0646\u06cc\u0645:<\/p>\n<ol>\n<li>\n<p><strong>\u0645\u062a\u063a\u06cc\u0631 \u06a9\u0644\u0627\u0633<\/strong>: <code>_instance<\/code> \u0646\u0645\u0648\u0646\u0647 \u0627\u06cc \u0627\u0632 \u06a9\u0644\u0627\u0633 \u0631\u0627 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<li>\n<p><strong>\u062c\u062f\u06cc\u062f<\/strong> \u0631\u0648\u0634:<\/p>\n<ul>\n<li>\n<p>\u0627\u06af\u0631 \u0646\u0645\u0648\u0646\u0647 \u0627\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<li>\n<p>\u0627\u06af\u0631 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u062f \u06cc\u06a9\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<li>\n<p>\u0627\u06af\u0631 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u062f \u060c \u0646\u0645\u0648\u0646\u0647 \u0645\u0648\u062c\u0648\u062f \u0631\u0627 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0634\u0631\u0648\u0639 \u06a9\u0631\u062f\u0646<\/strong> \u0631\u0648\u0634:<\/p>\n<ul>\n<li>\n<p>\u0647\u0631 \u0628\u0627\u0631 \u06a9\u0647 \u0627\u0632 \u0633\u0627\u0632\u0646\u062f\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0645\u06cc \u0634\u0648\u062f<\/p>\n<\/li>\n<li>\n<p>\u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0646\u0645\u0648\u0646\u0647 \u0631\u0627 \u0628\u0647 \u0631\u0648\u0632 \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3 id=\"heading-slots-for-memory-optimization\"><span class=\"ez-toc-section\" id=\"%d8%a7%d8%b3%d9%84%d8%a7%d8%aa_%d8%a8%d8%b1%d8%a7%db%8c_%d8%a8%d9%87%db%8c%d9%86%d9%87_%d8%b3%d8%a7%d8%b2%db%8c_%d8%ad%d8%a7%d9%81%d8%b8%d9%87\"><\/span><strong>\u0627\u0633\u0644\u0627\u062a \u0628\u0631\u0627\u06cc \u0628\u0647\u06cc\u0646\u0647 \u0633\u0627\u0632\u06cc \u062d\u0627\u0641\u0638\u0647<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u062f\u0631 <code>__slots__<\/code> \u0645\u062a\u063a\u06cc\u0631 \u06a9\u0644\u0627\u0633 \u0645\u062d\u062f\u0648\u062f \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0646\u0645\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u060c \u0635\u0631\u0641\u0647 \u062c\u0648\u06cc\u06cc \u062f\u0631 \u062d\u0627\u0641\u0638\u0647. \u0627\u06cc\u0646 \u0627\u0645\u0631 \u0628\u0647 \u0648\u06cc\u0698\u0647 \u0647\u0646\u06af\u0627\u0645\u06cc \u0645\u0641\u06cc\u062f \u0627\u0633\u062a \u06a9\u0647 \u0634\u0645\u0627 \u0646\u0645\u0648\u0646\u0647 \u0647\u0627\u06cc \u0632\u06cc\u0627\u062f\u06cc \u0627\u0632 \u06cc\u06a9 \u06a9\u0644\u0627\u0633 \u0628\u0627 \u06cc\u06a9 \u0645\u062c\u0645\u0648\u0639\u0647 \u062b\u0627\u0628\u062a \u0627\u0632 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f.<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0645\u0642\u0627\u06cc\u0633\u0647 \u06a9\u0644\u0627\u0633\u0647\u0627\u06cc \u0645\u0646\u0638\u0645 \u0648 \u0634\u06a9\u0627\u0641 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f:<\/p>\n<pre><code class=\"lang-python\"><span class=\"hljs-keyword\">import<\/span> sys\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">RegularPerson<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span>(<span class=\"hljs-params\">self, name, age, email<\/span>):<\/span>\n        self.name = name\n        self.age = age\n        self.email = email\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">SlottedPerson<\/span>:<\/span>\n    __slots__ = [<span class=\"hljs-string\">'name'<\/span>, <span class=\"hljs-string\">'age'<\/span>, <span class=\"hljs-string\">'email'<\/span>]\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span>(<span class=\"hljs-params\">self, name, age, email<\/span>):<\/span>\n        self.name = name\n        self.age = age\n        self.email = email\n\n<span class=\"hljs-comment\"># Compare memory usage<\/span>\nregular_people = [RegularPerson(<span class=\"hljs-string\">\"Vivek\"<\/span> + str(i), <span class=\"hljs-number\">30<\/span>, <span class=\"hljs-string\">\"hello@wewake.dev\"<\/span>) <span class=\"hljs-keyword\">for<\/span> i <span class=\"hljs-keyword\">in<\/span> range(<span class=\"hljs-number\">1000<\/span>)]\nslotted_people = [SlottedPerson(<span class=\"hljs-string\">\"Vivek\"<\/span> + str(i), <span class=\"hljs-number\">30<\/span>, <span class=\"hljs-string\">\"hello@wewake.dev\"<\/span>) <span class=\"hljs-keyword\">for<\/span> i <span class=\"hljs-keyword\">in<\/span> range(<span class=\"hljs-number\">1000<\/span>)]\n\nprint(<span class=\"hljs-string\">f\"Regular person size: <span class=\"hljs-subst\">{sys.getsizeof(regular_people[<span class=\"hljs-number\">0<\/span>])}<\/span> bytes\"<\/span>)  <span class=\"hljs-comment\"># Output: Regular person size: 48 bytes<\/span>\nprint(<span class=\"hljs-string\">f\"Slotted person size: <span class=\"hljs-subst\">{sys.getsizeof(slotted_people[<span class=\"hljs-number\">0<\/span>])}<\/span> bytes\"<\/span>)  <span class=\"hljs-comment\"># Output: Slotted person size: 56 bytes<\/span>\nprint(<span class=\"hljs-string\">f\"Memory saved per instance: <span class=\"hljs-subst\">{sys.getsizeof(regular_people[<span class=\"hljs-number\">0<\/span>]) - sys.getsizeof(slotted_people[<span class=\"hljs-number\">0<\/span>])}<\/span> bytes\"<\/span>)  <span class=\"hljs-comment\"># Output: Memory saved per instance: -8 bytes<\/span>\nprint(<span class=\"hljs-string\">f\"Total memory saved for 1000 instances: <span class=\"hljs-subst\">{(sys.getsizeof(regular_people[<span class=\"hljs-number\">0<\/span>]) - sys.getsizeof(slotted_people[<span class=\"hljs-number\">0<\/span>])) * <span class=\"hljs-number\">1000<\/span> \/ <span class=\"hljs-number\">1024<\/span>:<span class=\"hljs-number\">.2<\/span>f}<\/span> KB\"<\/span>)  <span class=\"hljs-comment\"># Output: Total memory saved for 1000 instances: -7.81 KB<\/span>\n<\/code><\/pre>\n<p>\u0627\u062c\u0631\u0627\u06cc \u0627\u06cc\u0646 \u06a9\u062f \u0646\u062a\u06cc\u062c\u0647 \u062c\u0627\u0644\u0628\u06cc \u0631\u0627 \u0628\u0647 \u0648\u062c\u0648\u062f \u0645\u06cc \u0622\u0648\u0631\u062f:<\/p>\n<pre><code class=\"lang-plaintext\">Regular person size: 48 bytes\nSlotted person size: 56 bytes\nMemory saved per instance: -8 bytes\nTotal memory saved for 1000 instances: -7.81 KB\n<\/code><\/pre>\n<p>\u0628\u0627 \u06a9\u0645\u0627\u0644 \u062a\u0639\u062c\u0628 \u060c \u062f\u0631 \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644 \u0633\u0627\u062f\u0647 \u060c \u0646\u0645\u0648\u0646\u0647 \u0634\u06a9\u0627\u0641 \u062f\u0631 \u0648\u0627\u0642\u0639 8 \u0628\u0627\u06cc\u062a \u0628\u0632\u0631\u06af\u062a\u0631 \u0627\u0632 \u0646\u0645\u0648\u0646\u0647 \u0645\u0639\u0645\u0648\u0644\u06cc \u0627\u0633\u062a! \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0631\u0633\u062f \u0627\u06cc\u0646 \u0628\u0627 \u062a\u0648\u0635\u06cc\u0647 \u0647\u0627\u06cc \u0645\u0634\u062a\u0631\u06a9 \u062f\u0631 \u0645\u0648\u0631\u062f \u0622\u0646 \u0645\u063a\u0627\u06cc\u0631\u062a \u062f\u0627\u0631\u062f <code>__slots__<\/code> \u0630\u062e\u06cc\u0631\u0647 \u062d\u0627\u0641\u0638\u0647.<\/p>\n<p>\u067e\u0633 \u0686\u0647 \u0645\u06cc \u06af\u0630\u0631\u062f \u0631\u0648\u06cc \u0627\u06cc\u0646\u062c\u0627\u061f \u0635\u0631\u0641\u0647 \u062c\u0648\u06cc\u06cc \u062f\u0631 \u062d\u0627\u0641\u0638\u0647 \u0648\u0627\u0642\u0639\u06cc \u0627\u0632 <code>__slots__<\/code> \u0628\u06cc\u0627 \u0627\u0632:<\/p>\n<ol>\n<li>\n<p>\u0627\u0632 \u0628\u06cc\u0646 \u0628\u0631\u062f\u0646 \u0641\u0631\u0647\u0646\u06af \u0644\u063a\u062a: \u0627\u0634\u06cc\u0627\u0621 \u0645\u0639\u0645\u0648\u0644\u06cc \u067e\u0627\u06cc\u062a\u0648\u0646 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u0641\u0631\u0647\u0646\u06af \u0644\u063a\u062a \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u06a9\u0646\u0646\u062f (<code>__dict__<\/code>) \u060c \u06a9\u0647 \u062f\u0627\u0631\u0627\u06cc \u0633\u0631\u0628\u0627\u0631 \u0627\u0633\u062a. \u062f\u0631 <code>sys.getsizeof()<\/code> \u0639\u0645\u0644\u06a9\u0631\u062f \u0627\u0646\u062f\u0627\u0632\u0647 \u0627\u06cc\u0646 \u0641\u0631\u0647\u0646\u06af \u0644\u063a\u062a \u0631\u0627 \u0628\u0647 \u062e\u0648\u062f \u0627\u062e\u062a\u0635\u0627\u0635 \u0646\u0645\u06cc \u062f\u0647\u062f.<\/p>\n<\/li>\n<li>\n<p>\u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u0632\u06cc \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627: \u0628\u0631\u0627\u06cc \u0627\u0634\u06cc\u0627\u0621 \u06a9\u0648\u0686\u06a9 \u0628\u0627 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0627\u0646\u062f\u06a9 \u060c \u0633\u0631\u0628\u0627\u0631 \u062a\u0648\u0635\u06cc\u0641 \u06a9\u0646\u0646\u062f\u0647 \u0647\u0627\u06cc \u0634\u06a9\u0627\u0641 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0627\u0632 \u067e\u0633 \u0627\u0646\u062f\u0627\u0632 \u0641\u0631\u0647\u0646\u06af \u0644\u063a\u062a \u0641\u0631\u0627\u062a\u0631 \u0631\u0648\u062f.<\/p>\n<\/li>\n<li>\n<p>\u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631\u06cc: \u0633\u0648\u062f \u0648\u0627\u0642\u0639\u06cc \u0648\u0642\u062a\u06cc \u0638\u0627\u0647\u0631 \u0645\u06cc \u0634\u0648\u062f:<\/p>\n<ul>\n<li>\n<p>\u0634\u0645\u0627 \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0627\u062f\u06cc \u062f\u0627\u0631\u06cc\u062f (\u0647\u0632\u0627\u0631\u0627\u0646 \u06cc\u0627 \u0645\u06cc\u0644\u06cc\u0648\u0646 \u0647\u0627 \u0646\u0641\u0631)<\/p>\n<\/li>\n<li>\n<p>\u0627\u0634\u06cc\u0627\u0621 \u0634\u0645\u0627 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0632\u06cc\u0627\u062f\u06cc \u062f\u0627\u0631\u0646\u062f<\/p>\n<\/li>\n<li>\n<p>\u0634\u0645\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u067e\u0648\u06cc\u0627 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u062f<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u06cc\u06a9 \u0645\u0642\u0627\u06cc\u0633\u0647 \u06a9\u0627\u0645\u0644 \u062a\u0631 \u0631\u0627 \u0628\u0628\u06cc\u0646\u06cc\u0645:<\/p>\n<pre><code class=\"lang-python\"><span class=\"hljs-comment\"># A more accurate memory measurement<\/span>\n<span class=\"hljs-keyword\">import<\/span> sys\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">get_size<\/span>(<span class=\"hljs-params\">obj<\/span>):<\/span>\n    <span class=\"hljs-string\">\"\"\"Get a better estimate of the object's size in bytes.\"\"\"<\/span>\n    size = sys.getsizeof(obj)\n    <span class=\"hljs-keyword\">if<\/span> hasattr(obj, <span class=\"hljs-string\">'__dict__'<\/span>):\n        size += sys.getsizeof(obj.__dict__)\n        <span class=\"hljs-comment\"># Add the size of the dict contents<\/span>\n        size += sum(sys.getsizeof(v) <span class=\"hljs-keyword\">for<\/span> v <span class=\"hljs-keyword\">in<\/span> obj.__dict__.values())\n    <span class=\"hljs-keyword\">return<\/span> size\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">RegularPerson<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span>(<span class=\"hljs-params\">self, name, age, email<\/span>):<\/span>\n        self.name = name\n        self.age = age\n        self.email = email\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">SlottedPerson<\/span>:<\/span>\n    __slots__ = [<span class=\"hljs-string\">'name'<\/span>, <span class=\"hljs-string\">'age'<\/span>, <span class=\"hljs-string\">'email'<\/span>]\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span>(<span class=\"hljs-params\">self, name, age, email<\/span>):<\/span>\n        self.name = name\n        self.age = age\n        self.email = email\n\nregular = RegularPerson(<span class=\"hljs-string\">\"Vivek\"<\/span>, <span class=\"hljs-number\">30<\/span>, <span class=\"hljs-string\">\"hello@wewake.dev\"<\/span>)\nslotted = SlottedPerson(<span class=\"hljs-string\">\"Vivek\"<\/span>, <span class=\"hljs-number\">30<\/span>, <span class=\"hljs-string\">\"hello@wewake.dev\"<\/span>)\n\nprint(<span class=\"hljs-string\">f\"Complete Regular person size: <span class=\"hljs-subst\">{get_size(regular)}<\/span> bytes\"<\/span>)  <span class=\"hljs-comment\"># Output: Complete Regular person size: 610 bytes<\/span>\nprint(<span class=\"hljs-string\">f\"Complete Slotted person size: <span class=\"hljs-subst\">{get_size(slotted)}<\/span> bytes\"<\/span>)  <span class=\"hljs-comment\"># Output: Complete Slotted person size: 56 bytes<\/span>\n<\/code><\/pre>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u0627\u0646\u062f\u0627\u0632\u0647 \u06af\u06cc\u0631\u06cc \u062f\u0642\u06cc\u0642 \u062a\u0631 \u060c \u062e\u0648\u0627\u0647\u06cc\u062f \u062f\u06cc\u062f \u06a9\u0647 \u0627\u0634\u06cc\u0627\u0621 \u0634\u06a9\u0627\u0641 \u062f\u0627\u0631 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0627\u0632 \u062d\u0627\u0641\u0638\u0647 \u06a9\u0644 \u06a9\u0645\u062a\u0631\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0646\u062f \u060c \u0628\u0647 \u062e\u0635\u0648\u0635 \u06a9\u0647 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0628\u06cc\u0634\u062a\u0631\u06cc \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0646\u06a9\u0627\u062a \u06a9\u0644\u06cc\u062f\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f <code>__slots__<\/code>:<\/p>\n<ol>\n<li>\n<p><strong>\u0645\u0632\u0627\u06cc\u0627\u06cc \u062d\u0627\u0641\u0638\u0647 \u0648\u0627\u0642\u0639\u06cc<\/strong>: \u0635\u0631\u0641\u0647 \u062c\u0648\u06cc\u06cc \u062f\u0631 \u062d\u0627\u0641\u0638\u0647 \u0627\u0648\u0644\u06cc\u0647 \u0646\u0627\u0634\u06cc \u0627\u0632 \u062d\u0630\u0641 \u0646\u0645\u0648\u0646\u0647 \u0627\u0633\u062a <code>__dict__<\/code><\/p>\n<\/li>\n<li>\n<p><strong>\u0645\u062d\u062f\u0648\u062f\u06cc\u062a \u0647\u0627\u06cc \u067e\u0648\u06cc\u0627<\/strong>: \u0634\u0645\u0627 \u0646\u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u062f\u0644\u062e\u0648\u0627\u0647 \u0631\u0627 \u0628\u0647 \u0627\u0634\u06cc\u0627\u0621 \u0634\u06a9\u0627\u0641 \u062f\u0627\u0631 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f<\/p>\n<\/li>\n<li>\n<p><strong>\u0645\u0644\u0627\u062d\u0638\u0627\u062a \u0648\u0631\u0627\u062b\u062a<\/strong>: \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <code>__slots__<\/code> \u0628\u0627 \u0648\u0631\u0627\u062b\u062a \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u06cc\u0632\u06cc \u062f\u0642\u06cc\u0642 \u062f\u0627\u0631\u062f<\/p>\n<\/li>\n<li>\n<p><strong>\u0645\u0648\u0627\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647<\/strong>: \u0628\u0647\u062a\u0631\u06cc\u0646 \u0628\u0631\u0627\u06cc \u06a9\u0644\u0627\u0633\u0647\u0627 \u0628\u0627 \u0628\u0633\u06cc\u0627\u0631\u06cc \u0627\u0632 \u0645\u0648\u0627\u0631\u062f \u0648 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u062b\u0627\u0628\u062a<\/p>\n<\/li>\n<li>\n<p><strong>\u062c\u0627\u06cc\u0632\u0647 \u0639\u0645\u0644\u06a9\u0631\u062f<\/strong>: \u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u062f\u0631 \u0628\u0631\u062e\u06cc \u0645\u0648\u0627\u0631\u062f \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0633\u0631\u06cc\u0639\u062a\u0631 \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u06a9\u0646\u062f<\/p>\n<\/li>\n<\/ol>\n<h3 id=\"heading-missing-for-default-dictionary-values\"><span class=\"ez-toc-section\" id=\"%d8%a8%d8%b1%d8%a7%db%8c_%d9%85%d9%82%d8%a7%d8%af%db%8c%d8%b1_%d9%81%d8%b1%d9%87%d9%86%da%af_%d9%84%d8%ba%d8%aa_%d9%be%db%8c%d8%b4_%d9%81%d8%b1%d8%b6_%d9%88%d8%ac%d9%88%d8%af_%d9%86%d8%af%d8%a7%d8%b1%d8%af\"><\/span><strong>\u0628\u0631\u0627\u06cc \u0645\u0642\u0627\u062f\u06cc\u0631 \u0641\u0631\u0647\u0646\u06af \u0644\u063a\u062a \u067e\u06cc\u0634 \u0641\u0631\u0636 \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u062f\u0631 <code>__missing__<\/code> \u0648\u0642\u062a\u06cc \u06cc\u06a9 \u06a9\u0644\u06cc\u062f \u067e\u06cc\u062f\u0627 \u0646\u0634\u0648\u062f \u060c \u0631\u0648\u0634 \u062a\u0648\u0633\u0637 \u0632\u06cc\u0631 \u06a9\u0644\u0627\u0633\u0647\u0627\u06cc \u0641\u0631\u0647\u0646\u06af \u0644\u063a\u062a \u062e\u0648\u0627\u0646\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f. \u0627\u06cc\u0646 \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u0641\u0631\u0647\u0646\u06af \u0644\u063a\u062a \u0628\u0627 \u0645\u0642\u0627\u062f\u06cc\u0631 \u067e\u06cc\u0634 \u0641\u0631\u0636 \u06cc\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0644\u06cc\u062f \u062e\u0648\u062f\u06a9\u0627\u0631 \u0645\u0641\u06cc\u062f \u0627\u0633\u062a.<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u0645\u0648\u0646\u0647 \u0627\u06cc \u0627\u0632 \u0641\u0631\u0647\u0646\u06af \u0644\u063a\u062a \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0644\u06cc\u0633\u062a \u0647\u0627\u06cc \u062e\u0627\u0644\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u06af\u0645\u0634\u062f\u0647 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f:<\/p>\n<pre><code class=\"lang-python\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">AutoKeyDict<\/span>(<span class=\"hljs-params\">dict<\/span>):<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__missing__<\/span>(<span class=\"hljs-params\">self, key<\/span>):<\/span>\n        self[key] = []\n        <span class=\"hljs-keyword\">return<\/span> self[key]\n\n<span class=\"hljs-comment\"># Usage<\/span>\ngroups = AutoKeyDict()\ngroups[<span class=\"hljs-string\">\"team1\"<\/span>].append(<span class=\"hljs-string\">\"Vivek\"<\/span>)\ngroups[<span class=\"hljs-string\">\"team1\"<\/span>].append(<span class=\"hljs-string\">\"Wewake\"<\/span>)\ngroups[<span class=\"hljs-string\">\"team2\"<\/span>].append(<span class=\"hljs-string\">\"Vibha\"<\/span>)\n\nprint(groups)  <span class=\"hljs-comment\"># Output: {'team1': ['Vivek', 'Wewake'], 'team2': ['Vibha']}<\/span>\n<\/code><\/pre>\n<p>\u0627\u06cc\u0646 \u0627\u062c\u0631\u0627\u06cc \u0645\u0632\u0627\u06cc\u0627\u06cc \u0645\u062e\u062a\u0644\u0641\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<ol>\n<li>\n<p>\u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 \u0628\u0631\u0631\u0633\u06cc \u0648\u062c\u0648\u062f \u06cc\u06a9 \u06a9\u0644\u06cc\u062f \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f \u060c \u06a9\u0647 \u0631\u0627\u062d\u062a \u062a\u0631 \u0627\u0633\u062a.<\/p>\n<\/li>\n<li>\n<p>\u0627\u0648\u0644\u06cc\u0647 \u0633\u0627\u0632\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631 \u0645\u0642\u0627\u062f\u06cc\u0631 \u067e\u06cc\u0634 \u0641\u0631\u0636 \u0631\u0627 \u062f\u0631 \u0635\u0648\u0631\u062a \u0644\u0632\u0648\u0645 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<\/li>\n<li>\n<p>\u062f\u06cc\u06af \u0628\u062e\u0627\u0631 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0633\u0627\u0632\u06cc \u0641\u0631\u0647\u0646\u06af \u0644\u063a\u062a \u06a9\u0627\u0647\u0634 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<\/li>\n<li>\n<p>\u0627\u06cc\u0646 \u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631 \u062a\u0631 \u0627\u0633\u062a \u0648 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0647\u0631 \u0645\u0646\u0637\u0642 \u0627\u0631\u0632\u0634 \u067e\u06cc\u0634 \u0641\u0631\u0636 \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u062f.<\/p>\n<\/li>\n<li>\n<p>\u0641\u0642\u0637 \u062f\u0631 \u0635\u0648\u0631\u062a \u0644\u0632\u0648\u0645 \u0645\u0642\u0627\u062f\u06cc\u0631 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0628\u0627\u0639\u062b \u0645\u06cc \u0634\u0648\u062f \u062d\u0627\u0641\u0638\u0647 \u0628\u06cc\u0634\u062a\u0631 \u0628\u0627\u0634\u062f.<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"heading-performance-considerations\"><span class=\"ez-toc-section\" id=\"%d9%85%d9%84%d8%a7%d8%ad%d8%b8%d8%a7%d8%aa_%d8%b9%d9%85%d9%84%da%a9%d8%b1%d8%af\"><\/span><strong>\u0645\u0644\u0627\u062d\u0638\u0627\u062a \u0639\u0645\u0644\u06a9\u0631\u062f<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0631\u0648\u0634 \u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0647\u0633\u062a\u0646\u062f \u060c \u0627\u06af\u0631 \u0634\u0645\u0627 \u0627\u0632 \u0622\u0646\u0647\u0627 \u0628\u0627 \u062f\u0642\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u06a9\u0646\u06cc\u062f \u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0628\u0631 \u0639\u0645\u0644\u06a9\u0631\u062f \u062a\u0623\u062b\u06cc\u0631 \u0628\u06af\u0630\u0627\u0631\u0646\u062f. \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0631\u062e\u06cc \u0627\u0632 \u0645\u0644\u0627\u062d\u0638\u0627\u062a \u0639\u0645\u0644\u06a9\u0631\u062f \u0645\u0634\u062a\u0631\u06a9 \u0648 \u0631\u0648\u0634 \u0627\u0646\u062f\u0627\u0632\u0647 \u06af\u06cc\u0631\u06cc \u0622\u0646\u0647\u0627 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n<h3 id=\"heading-impact-of-magic-methods-on-performance\"><span class=\"ez-toc-section\" id=\"%d8%aa%d8%a3%d8%ab%db%8c%d8%b1_%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c_%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c_%d8%b1%d9%88%db%8c_%d8%b9%d9%85%d9%84\"><\/span><strong>\u062a\u0623\u062b\u06cc\u0631 \u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u0631\u0648\u06cc \u0639\u0645\u0644<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0631\u0648\u0634\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u062c\u0627\u062f\u0648\u06cc\u06cc \u067e\u06cc\u0627\u0645\u062f\u0647\u0627\u06cc \u0639\u0645\u0644\u06a9\u0631\u062f \u0645\u062a\u0641\u0627\u0648\u062a\u06cc \u062f\u0627\u0631\u0646\u062f:<\/p>\n<p><strong>\u0631\u0648\u0634\u0647\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0648\u06cc\u0698\u06af\u06cc<\/strong>:<\/p>\n<ul>\n<li>\n<p><code>__getattr__<\/code>\u0628\u0627 <code>__getattribute__<\/code>\u0628\u0627 <code>__setattr__<\/code>\u0648\u062a <code>__delattr__<\/code> \u063a\u0627\u0644\u0628\u0627\u064b \u0646\u0627\u0645\u06cc\u062f\u0647 \u0645\u06cc \u0634\u0648\u0646\u062f<\/p>\n<\/li>\n<li>\n<p>\u0639\u0645\u0644\u06cc\u0627\u062a \u067e\u06cc\u0686\u06cc\u062f\u0647 \u062f\u0631 \u0627\u06cc\u0646 \u0631\u0648\u0634\u0647\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u06a9\u062f \u0634\u0645\u0627 \u0631\u0627 \u0628\u0647 \u0645\u06cc\u0632\u0627\u0646 \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u0647\u06cc \u06a9\u0646\u062f \u06a9\u0646\u062f<\/p>\n<\/li>\n<\/ul>\n<p><strong>Container  \u0631\u0648\u0634<\/strong>:<\/p>\n<ul>\n<li>\n<p><code>__getitem__<\/code>\u0628\u0627 <code>__setitem__<\/code>\u0648\u062a <code>__len__<\/code> \u0627\u063a\u0644\u0628 \u062f\u0631 \u062d\u0644\u0642\u0647 \u0647\u0627 \u062e\u0648\u0627\u0646\u062f\u0647 \u0645\u06cc \u0634\u0648\u0646\u062f<\/p>\n<\/li>\n<li>\n<p>\u0627\u062c\u0631\u0627\u06cc \u0646\u0627\u06a9\u0627\u0631\u0622\u0645\u062f \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0634\u0645\u0627 \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u062f container \u0628\u0633\u06cc\u0627\u0631 \u06a9\u0646\u062f\u062a\u0631 \u0627\u0632 \u0627\u0646\u0648\u0627\u0639 \u062f\u0627\u062e\u0644\u06cc<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0627\u0636\u0627\u0641\u0647 \u0628\u0627\u0631 \u0627\u067e\u0631\u0627\u062a\u0648\u0631<\/strong>:<\/p>\n<ul>\n<li>\n<p>\u0627\u067e\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u062d\u0633\u0627\u0628\u06cc \u0648 \u0645\u0642\u0627\u06cc\u0633\u0647 \u0628\u0647 \u0637\u0648\u0631 \u0645\u06a9\u0631\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u0646\u062f<\/p>\n<\/li>\n<li>\n<p>\u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0647\u0627\u06cc \u067e\u06cc\u0686\u06cc\u062f\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0639\u0645\u0644\u06cc\u0627\u062a \u0633\u0627\u062f\u0647 \u0631\u0627 \u0628\u0647 \u0637\u0648\u0631 \u063a\u06cc\u0631 \u0645\u0646\u062a\u0638\u0631\u0647 \u0627\u06cc \u0622\u0647\u0633\u062a\u0647 \u06a9\u0646\u0646\u062f<\/p>\n<\/li>\n<\/ul>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u062a\u0623\u062b\u06cc\u0631 \u0639\u0645\u0644\u06a9\u0631\u062f \u0631\u0627 \u0627\u0646\u062f\u0627\u0632\u0647 \u06af\u06cc\u0631\u06cc \u06a9\u0646\u06cc\u0645 <code>__getattr__<\/code> \u062f\u0631 \u0645\u0642\u0627\u0628\u0644 \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u0633\u062a\u0642\u06cc\u0645 \u0628\u0647 \u0648\u06cc\u0698\u06af\u06cc:<\/p>\n<pre><code class=\"lang-python\"><span class=\"hljs-keyword\">import<\/span> time\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">DirectAccess<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span>(<span class=\"hljs-params\">self<\/span>):<\/span>\n        self.value = <span class=\"hljs-number\">42<\/span>\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">GetAttrAccess<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span>(<span class=\"hljs-params\">self<\/span>):<\/span>\n        self._value = <span class=\"hljs-number\">42<\/span>\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__getattr__<\/span>(<span class=\"hljs-params\">self, name<\/span>):<\/span>\n        <span class=\"hljs-keyword\">if<\/span> name == <span class=\"hljs-string\">\"value\"<\/span>:\n            <span class=\"hljs-keyword\">return<\/span> self._value\n        <span class=\"hljs-keyword\">raise<\/span> AttributeError(<span class=\"hljs-string\">f\"'<span class=\"hljs-subst\">{self.__class__.__name__}<\/span>' object has no attribute '<span class=\"hljs-subst\">{name}<\/span>'\"<\/span>)\n\n<span class=\"hljs-comment\"># Measure performance<\/span>\ndirect = DirectAccess()\ngetattr_obj = GetAttrAccess()\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">benchmark<\/span>(<span class=\"hljs-params\">obj, iterations=<span class=\"hljs-number\">1000000<\/span><\/span>):<\/span>\n    start = time.time()\n    <span class=\"hljs-keyword\">for<\/span> _ <span class=\"hljs-keyword\">in<\/span> range(iterations):\n        x = obj.value\n    end = time.time()\n    <span class=\"hljs-keyword\">return<\/span> end - start\n\ndirect_time = benchmark(direct)\ngetattr_time = benchmark(getattr_obj)\n\nprint(<span class=\"hljs-string\">f\"Direct access: <span class=\"hljs-subst\">{direct_time:<span class=\"hljs-number\">.6<\/span>f}<\/span> seconds\"<\/span>)\nprint(<span class=\"hljs-string\">f\"__getattr__ access: <span class=\"hljs-subst\">{getattr_time:<span class=\"hljs-number\">.6<\/span>f}<\/span> seconds\"<\/span>)\nprint(<span class=\"hljs-string\">f\"__getattr__ is <span class=\"hljs-subst\">{getattr_time \/ direct_time:<span class=\"hljs-number\">.2<\/span>f}<\/span>x slower\"<\/span>)\n<\/code><\/pre>\n<p>\u0627\u062c\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0645\u0639\u06cc\u0627\u0631 \u062a\u0641\u0627\u0648\u062a\u0647\u0627\u06cc \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u0647\u06cc \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<pre><code class=\"lang-plaintext\">Direct access: 0.027714 seconds\n__getattr__ access: 0.060646 seconds\n__getattr__ is 2.19x slower\n<\/code><\/pre>\n<p>\u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u062f \u060c \u0627\u0633\u062a\u0641\u0627\u062f\u0647 <code>__getattr__<\/code> \u0628\u06cc\u0634 \u0627\u0632 \u062f\u0648 \u0628\u0631\u0627\u0628\u0631 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0648\u06cc\u0698\u06af\u06cc \u0645\u0633\u062a\u0642\u06cc\u0645 \u0627\u0633\u062a. \u0627\u06cc\u0646 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0628\u0631\u0627\u06cc \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u06af\u0627\u0647 \u0628\u0647 \u06af\u0627\u0647 \u0642\u0627\u0628\u0644 \u062f\u0633\u062a\u0631\u0633\u06cc \u0646\u0628\u0627\u0634\u062f \u060c \u0627\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u062f\u0631 \u06a9\u062f \u0645\u0647\u0645 \u0639\u0645\u0644\u06a9\u0631\u062f\u06cc \u06a9\u0647 \u0628\u0647 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u062d\u0644\u0642\u0647 \u0647\u0627\u06cc \u062a\u0646\u06af \u062f\u0633\u062a\u0631\u0633\u06cc \u067e\u06cc\u062f\u0627 \u0645\u06cc \u06a9\u0646\u062f \u060c \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u0647 \u0628\u0627\u0634\u062f.<\/p>\n<h3 id=\"heading-optimization-strategies\"><span class=\"ez-toc-section\" id=\"%d8%a7%d8%b3%d8%aa%d8%b1%d8%a7%d8%aa%da%98%db%8c_%d9%87%d8%a7%db%8c_%d8%a8%d9%87%db%8c%d9%86%d9%87_%d8%b3%d8%a7%d8%b2%db%8c\"><\/span><strong>\u0627\u0633\u062a\u0631\u0627\u062a\u0698\u06cc \u0647\u0627\u06cc \u0628\u0647\u06cc\u0646\u0647 \u0633\u0627\u0632\u06cc<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u062e\u0648\u0634\u0628\u062e\u062a\u0627\u0646\u0647 \u0631\u0648\u0634\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u0631\u0627 \u0628\u0647\u06cc\u0646\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<ol>\n<li>\n<p><strong>\u0628\u0631\u0627\u06cc \u0628\u0647\u0631\u0647 \u0648\u0631\u06cc \u062d\u0627\u0641\u0638\u0647 \u0627\u0632 \u0634\u06a9\u0627\u0641\u0647\u0627\u06cc\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f<\/strong>: \u0627\u06cc\u0646 \u0628\u0627\u0639\u062b \u06a9\u0627\u0647\u0634 \u0645\u0635\u0631\u0641 \u062d\u0627\u0641\u0638\u0647 \u0645\u06cc \u0634\u0648\u062f \u0648 \u0633\u0631\u0639\u062a \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0648\u06cc\u0698\u06af\u06cc \u0631\u0627 \u0628\u0647\u0628\u0648\u062f \u0645\u06cc \u0628\u062e\u0634\u062f. \u0628\u0631\u0627\u06cc \u06a9\u0644\u0627\u0633 \u0647\u0627\u06cc\u06cc \u0628\u0627 \u0645\u0648\u0627\u0631\u062f \u0628\u0633\u06cc\u0627\u0631\u06cc \u0628\u0647\u062a\u0631 \u0627\u0633\u062a.<\/p>\n<\/li>\n<li>\n<p><strong>\u0645\u0642\u0627\u062f\u06cc\u0631 \u0645\u062d\u0627\u0633\u0628\u0647 \u0634\u062f\u0647 \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646<\/strong>: \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0646\u062a\u0627\u06cc\u062c \u0639\u0645\u0644\u06cc\u0627\u062a \u06af\u0631\u0627\u0646 \u0642\u06cc\u0645\u062a \u0631\u0627 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0631\u062f\u0647 \u0648 \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 \u0631\u0627 \u0641\u0642\u0637 \u062f\u0631 \u0635\u0648\u0631\u062a \u0644\u0632\u0648\u0645 \u0628\u0647 \u0631\u0648\u0632 \u06a9\u0646\u06cc\u062f. \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u0646 <code>@property<\/code> \u0628\u0631\u0627\u06cc \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0645\u062d\u0627\u0633\u0628\u0647 \u0634\u062f\u0647<\/p>\n<\/li>\n<li>\n<p><strong>\u062a\u0645\u0627\u0633 \u0647\u0627\u06cc \u0631\u0648\u0634 \u0631\u0627 \u0628\u0647 \u062d\u062f\u0627\u0642\u0644 \u0628\u0631\u0633\u0627\u0646\u06cc\u062f<\/strong>: \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0627\u0632 \u062a\u0645\u0627\u0633 \u0647\u0627\u06cc \u0631\u0648\u0634 \u062c\u0627\u062f\u0648\u06cc\u06cc \u063a\u06cc\u0631 \u0636\u0631\u0648\u0631\u06cc \u062e\u0648\u062f\u062f\u0627\u0631\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u062f \u0648 \u062f\u0631 \u0635\u0648\u0631\u062a \u0627\u0645\u06a9\u0627\u0646 \u0627\u0632 \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u0633\u062a\u0642\u06cc\u0645 \u0628\u0647 \u0648\u06cc\u0698\u06af\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u062f. \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0631\u0627 \u062f\u0631 \u0646\u0638\u0631 \u0628\u06af\u06cc\u0631\u06cc\u062f <code>__slots__<\/code> \u0628\u0631\u0627\u06cc \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0645\u06a9\u0631\u0631.<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"heading-best-practices\"><span class=\"ez-toc-section\" id=\"%d8%a8%d9%87%d8%aa%d8%b1%db%8c%d9%86_%d8%b1%d9%88%d8%b4%d9%87%d8%a7\"><\/span><strong>\u0628\u0647\u062a\u0631\u06cc\u0646 \u0631\u0648\u0634\u0647\u0627<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0647\u0646\u06af\u0627\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u060c \u0627\u06cc\u0646 \u0628\u0647\u062a\u0631\u06cc\u0646 \u0631\u0648\u0634\u0647\u0627 \u0631\u0627 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u0634\u0648\u062f \u06a9\u0647 \u06a9\u062f \u0634\u0645\u0627 \u0642\u0627\u0628\u0644 \u062d\u0641\u0638 \u060c \u06a9\u0627\u0631\u0622\u0645\u062f \u0648 \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f \u0627\u0633\u062a.<\/p>\n<h3 id=\"heading-1-be-consistent\"><span class=\"ez-toc-section\" id=\"1_%d8%b3%d8%a7%d8%b2%da%af%d8%a7%d8%b1_%d8%a8%d8%a7%d8%b4%db%8c%d8%af\"><\/span><strong>1. \u0633\u0627\u0632\u06af\u0627\u0631 \u0628\u0627\u0634\u06cc\u062f<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0647\u0646\u06af\u0627\u0645 \u0627\u062c\u0631\u0627\u06cc \u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u0645\u0631\u062a\u0628\u0637 \u060c \u0633\u0627\u0632\u06af\u0627\u0631\u06cc \u062f\u0631 \u0631\u0641\u062a\u0627\u0631 \u0631\u0627 \u062d\u0641\u0638 \u06a9\u0646\u06cc\u062f:<\/p>\n<pre><code class=\"lang-python\"><span class=\"hljs-keyword\">from<\/span> functools <span class=\"hljs-keyword\">import<\/span> total_ordering\n\n<span class=\"hljs-meta\">@total_ordering<\/span>\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ConsistentNumber<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span>(<span class=\"hljs-params\">self, value<\/span>):<\/span>\n        self.value = value\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__eq__<\/span>(<span class=\"hljs-params\">self, other<\/span>):<\/span>\n        <span class=\"hljs-keyword\">if<\/span> <span class=\"hljs-keyword\">not<\/span> isinstance(other, ConsistentNumber):\n            <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-built_in\">NotImplemented<\/span>\n        <span class=\"hljs-keyword\">return<\/span> self.value == other.value\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__lt__<\/span>(<span class=\"hljs-params\">self, other<\/span>):<\/span>\n        <span class=\"hljs-keyword\">if<\/span> <span class=\"hljs-keyword\">not<\/span> isinstance(other, ConsistentNumber):\n            <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-built_in\">NotImplemented<\/span>\n        <span class=\"hljs-keyword\">return<\/span> self.value &lt; other.value\n<\/code><\/pre>\n<h3 id=\"heading-2-return-notimplemented\"><span class=\"ez-toc-section\" id=\"2_%d8%a8%d8%a7%d8%b2%da%af%d8%b1%d8%af%d8%a7%d9%86%d8%af%d9%86_%db%8c%d8%a7%d8%af%d8%af%d8%a7%d8%b4%d8%aa\"><\/span><strong>2. \u0628\u0627\u0632\u06af\u0631\u062f\u0627\u0646\u062f\u0646 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0648\u0642\u062a\u06cc \u06cc\u06a9 \u0639\u0645\u0644 \u0645\u0646\u0637\u0642\u06cc \u0646\u06cc\u0633\u062a \u060c \u0628\u0631\u06af\u0631\u062f\u06cc\u062f <code>NotImplemented<\/code> \u0628\u0631\u0627\u06cc \u0627\u062c\u0627\u0632\u0647 \u062f\u0627\u062f\u0646 \u0628\u0647 \u067e\u0627\u06cc\u062a\u0648\u0646 \u0639\u0645\u0644 \u0645\u0639\u06a9\u0648\u0633 \u0631\u0627 \u0627\u0645\u062a\u062d\u0627\u0646 \u06a9\u0646\u06cc\u062f:<\/p>\n<pre><code class=\"lang-python\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Money<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__add__<\/span>(<span class=\"hljs-params\">self, other<\/span>):<\/span>\n        <span class=\"hljs-keyword\">if<\/span> <span class=\"hljs-keyword\">not<\/span> isinstance(other, Money):\n            <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-built_in\">NotImplemented<\/span>\n        <span class=\"hljs-comment\"># ... rest of the implementation<\/span>\n<\/code><\/pre>\n<h3 id=\"heading-3-keep-it-simple\"><span class=\"ez-toc-section\" id=\"3_%d8%a2%d9%86_%d8%b1%d8%a7_%d8%b3%d8%a7%d8%af%d9%87_%d9%86%da%af%d9%87_%d8%af%d8%a7%d8%b1%db%8c%d8%af\"><\/span><strong>3. \u0622\u0646 \u0631\u0627 \u0633\u0627\u062f\u0647 \u0646\u06af\u0647 \u062f\u0627\u0631\u06cc\u062f<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u0628\u0627\u06cc\u062f \u0633\u0627\u062f\u0647 \u0648 \u0642\u0627\u0628\u0644 \u067e\u06cc\u0634 \u0628\u06cc\u0646\u06cc \u0628\u0627\u0634\u0646\u062f. \u0627\u0632 \u0645\u0646\u0637\u0642 \u067e\u06cc\u0686\u06cc\u062f\u0647 \u0627\u06cc \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0645\u0646\u062c\u0631 \u0628\u0647 \u0631\u0641\u062a\u0627\u0631 \u063a\u06cc\u0631 \u0645\u0646\u062a\u0638\u0631\u0647 \u0634\u0648\u062f \u060c \u062e\u0648\u062f\u062f\u0627\u0631\u06cc \u06a9\u0646\u06cc\u062f:<\/p>\n<pre><code class=\"lang-python\"><span class=\"hljs-comment\"># Good: Simple and predictable<\/span>\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">SimpleContainer<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span>(<span class=\"hljs-params\">self<\/span>):<\/span>\n        self.items = []\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__getitem__<\/span>(<span class=\"hljs-params\">self, index<\/span>):<\/span>\n        <span class=\"hljs-keyword\">return<\/span> self.items[index]\n\n<span class=\"hljs-comment\"># Bad: Complex and potentially confusing<\/span>\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ComplexContainer<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span>(<span class=\"hljs-params\">self<\/span>):<\/span>\n        self.items = []\n        self.access_count = <span class=\"hljs-number\">0<\/span>\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__getitem__<\/span>(<span class=\"hljs-params\">self, index<\/span>):<\/span>\n        self.access_count += <span class=\"hljs-number\">1<\/span>\n        <span class=\"hljs-keyword\">if<\/span> self.access_count &gt; <span class=\"hljs-number\">100<\/span>:\n            <span class=\"hljs-keyword\">raise<\/span> RuntimeError(<span class=\"hljs-string\">\"Too many accesses\"<\/span>)\n        <span class=\"hljs-keyword\">return<\/span> self.items[index]\n<\/code><\/pre>\n<h3 id=\"heading-4-document-behavior\"><span class=\"ez-toc-section\" id=\"4_%d8%b1%d9%81%d8%aa%d8%a7%d8%b1_%d8%a7%d8%b3%d9%86%d8%a7%d8%af\"><\/span><strong>4. \u0631\u0641\u062a\u0627\u0631 \u0627\u0633\u0646\u0627\u062f<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0647 \u0648\u0636\u0648\u062d \u0645\u0633\u062a\u0646\u062f \u0645\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u0634\u0645\u0627 \u0631\u0641\u062a\u0627\u0631 \u0645\u06cc \u06a9\u0646\u0646\u062f \u060c \u0628\u0647 \u062e\u0635\u0648\u0635 \u0627\u06af\u0631 \u0627\u0632 \u0627\u0646\u062a\u0638\u0627\u0631\u0627\u062a \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f \u0645\u0646\u062d\u0631\u0641 \u0634\u0648\u0646\u062f:<\/p>\n<pre><code class=\"lang-python\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">CustomDict<\/span>(<span class=\"hljs-params\">dict<\/span>):<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__missing__<\/span>(<span class=\"hljs-params\">self, key<\/span>):<\/span>\n        <span class=\"hljs-string\">\"\"\"\n        Called when a key is not found in the dictionary.\n        Creates a new list for the key and returns it.\n        This allows for automatic list creation when accessing\n        non-existent keys.\n        \"\"\"<\/span>\n        self[key] = []\n        <span class=\"hljs-keyword\">return<\/span> self[key]\n<\/code><\/pre>\n<h3 id=\"heading-5-consider-performance\"><span class=\"ez-toc-section\" id=\"5_%d8%b9%d9%85%d9%84%da%a9%d8%b1%d8%af_%d8%b1%d8%a7_%d8%af%d8%b1_%d9%86%d8%b8%d8%b1_%d8%a8%da%af%db%8c%d8%b1%db%8c%d8%af\"><\/span><strong>5. \u0639\u0645\u0644\u06a9\u0631\u062f \u0631\u0627 \u062f\u0631 \u0646\u0638\u0631 \u0628\u06af\u06cc\u0631\u06cc\u062f<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u0632 \u067e\u06cc\u0627\u0645\u062f\u0647\u0627\u06cc \u0639\u0645\u0644\u06a9\u0631\u062f \u0622\u06af\u0627\u0647 \u0628\u0627\u0634\u06cc\u062f \u060c \u0628\u0647 \u062e\u0635\u0648\u0635 \u0628\u0631\u0627\u06cc \u0631\u0648\u0634\u0647\u0627\u06cc \u0645\u06a9\u0631\u0631:<\/p>\n<pre><code class=\"lang-python\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">OptimizedContainer<\/span>:<\/span>\n    __slots__ = [<span class=\"hljs-string\">'items'<\/span>]  <span class=\"hljs-comment\"># Use __slots__ for better performance<\/span>\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span>(<span class=\"hljs-params\">self<\/span>):<\/span>\n        self.items = []\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__getitem__<\/span>(<span class=\"hljs-params\">self, index<\/span>):<\/span>\n        <span class=\"hljs-keyword\">return<\/span> self.items[index]  <span class=\"hljs-comment\"># Direct access is faster<\/span>\n<\/code><\/pre>\n<h3 id=\"heading-6-handle-edge-cases\"><span class=\"ez-toc-section\" id=\"6_%d9%85%d9%88%d8%a7%d8%b1%d8%af_%d9%84%d8%a8%d9%87_%d8%af%d8%b3%d8%aa%d9%87\"><\/span><strong>6. \u0645\u0648\u0627\u0631\u062f \u0644\u0628\u0647 \u062f\u0633\u062a\u0647<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0647\u0645\u06cc\u0634\u0647 \u0645\u0648\u0627\u0631\u062f \u0644\u0628\u0647 \u0631\u0627 \u062f\u0631 \u0646\u0638\u0631 \u0628\u06af\u06cc\u0631\u06cc\u062f \u0648 \u0622\u0646\u0647\u0627 \u0631\u0627 \u0628\u0647 \u0637\u0648\u0631 \u0645\u0646\u0627\u0633\u0628 \u0627\u062f\u0627\u0631\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<pre><code class=\"lang-python\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">SafeContainer<\/span>:<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__getitem__<\/span>(<span class=\"hljs-params\">self, key<\/span>):<\/span>\n        <span class=\"hljs-keyword\">if<\/span> <span class=\"hljs-keyword\">not<\/span> isinstance(key, (int, slice)):\n            <span class=\"hljs-keyword\">raise<\/span> TypeError(<span class=\"hljs-string\">\"Index must be integer or slice\"<\/span>)\n        <span class=\"hljs-keyword\">if<\/span> key &lt; <span class=\"hljs-number\">0<\/span>:\n            <span class=\"hljs-keyword\">raise<\/span> ValueError(<span class=\"hljs-string\">\"Index cannot be negative\"<\/span>)\n        <span class=\"hljs-comment\"># ... rest of the implementation<\/span>\n<\/code><\/pre>\n<h2 id=\"heading-wrapping-up\"><span class=\"ez-toc-section\" id=\"%d9%be%db%8c%da%86%db%8c%d8%af%d9%86\"><\/span><strong>\u067e\u06cc\u0686\u06cc\u062f\u0646<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u067e\u0627\u06cc\u062a\u0648\u0646 \u0631\u0648\u0634\u06cc \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0631\u0641\u062a\u0627\u0631 \u06a9\u0644\u0627\u0633\u0647\u0627\u06cc \u0634\u0645\u0627 \u0645\u0627\u0646\u0646\u062f \u0627\u0646\u0648\u0627\u0639 \u062f\u0627\u062e\u0644\u06cc \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0628\u0627\u0639\u062b \u0645\u06cc \u0634\u0648\u062f \u06a9\u062f \u0628\u0635\u0631\u06cc \u062a\u0631 \u0648 \u0628\u06cc\u0627\u0646\u06cc \u062a\u0631\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646\u062f. \u062f\u0631 \u0637\u0648\u0644 \u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627 \u060c \u0645\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0631\u062f\u0647 \u0627\u06cc\u0645 \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0627\u06cc\u0646 \u0631\u0648\u0634 \u0647\u0627 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u0646\u062f \u0648 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646 \u0627\u0632 \u0622\u0646\u0647\u0627 \u0628\u0647 \u0637\u0648\u0631 \u0645\u0624\u062b\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f.<\/p>\n<h3 id=\"heading-key-takeaways\"><span class=\"ez-toc-section\" id=\"%d8%ba%d8%b0%d8%a7%db%8c_%d8%a7%d8%b5%d9%84%db%8c\"><\/span><strong>\u063a\u0630\u0627\u06cc \u0627\u0635\u0644\u06cc<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ol>\n<li>\n<p><strong>\u0646\u0645\u0627\u06cc\u0646\u062f\u06af\u06cc \u0634\u06cc\u0621<\/strong>:<\/p>\n<ul>\n<li>\n<p>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u0646 <code>__str__<\/code> \u0628\u0631\u0627\u06cc \u062e\u0631\u0648\u062c\u06cc \u06a9\u0627\u0631\u0628\u0631 \u067e\u0633\u0646\u062f<\/p>\n<\/li>\n<li>\n<p>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u0646 <code>__repr__<\/code> \u0628\u0631\u0627\u06cc \u0627\u0634\u06a9\u0627\u0644 \u0632\u062f\u0627\u06cc\u06cc \u0648 \u062a\u0648\u0633\u0639\u0647<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0627\u0636\u0627\u0641\u0647 \u0628\u0627\u0631 \u0627\u067e\u0631\u0627\u062a\u0648\u0631<\/strong>:<\/p>\n<ul>\n<li>\n<p>\u0627\u067e\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u062d\u0633\u0627\u0628 \u0648 \u0645\u0642\u0627\u06cc\u0633\u0647 \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f<\/p>\n<\/li>\n<li>\n<p>\u0628\u0627\u0632\u06af\u0634\u062a <code>NotImplemented<\/code> \u0628\u0631\u0627\u06cc \u0639\u0645\u0644\u06cc\u0627\u062a \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0646\u0634\u062f\u0647<\/p>\n<\/li>\n<li>\n<p>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u0646 <code>@total_ordering<\/code> \u0628\u0631\u0627\u06cc \u0645\u0642\u0627\u06cc\u0633\u0647 \u0645\u062f\u0627\u0648\u0645<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>Container  \u0631\u0641\u062a\u0627\u0631<\/strong>:<\/p>\n<ul>\n<li>\n<p>\u067e\u0631\u0648\u062a\u06a9\u0644 \u0647\u0627\u06cc \u062a\u0648\u0627\u0644\u06cc \u0648 \u0646\u0642\u0634\u0647 \u0628\u0631\u062f\u0627\u0631\u06cc \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f<\/p>\n<\/li>\n<li>\n<p>\u0639\u0645\u0644\u06a9\u0631\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u0639\u0645\u0644\u06cc\u0627\u062a \u0645\u062a\u062f\u0627\u0648\u0644 \u062f\u0631 \u0646\u0638\u0631 \u0628\u06af\u06cc\u0631\u06cc\u062f<\/p>\n<\/li>\n<li>\n<p>\u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u0645\u0648\u0627\u0631\u062f \u0644\u0628\u0647 \u0645\u0646\u0627\u0633\u0628<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u0646\u0627\u0628\u0639<\/strong>:<\/p>\n<ul>\n<li>\n<p>\u0627\u0632 \u0645\u062f\u06cc\u0631\u0627\u0646 \u0632\u0645\u06cc\u0646\u0647 \u0628\u0631\u0627\u06cc \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u0645\u0646\u0627\u0628\u0639 \u0645\u0646\u0627\u0633\u0628 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f<\/p>\n<\/li>\n<li>\n<p>\u0627\u062c\u0631\u0627 <code>__enter__<\/code> \u0648\u062a <code>__exit__<\/code> \u0628\u0631\u0627\u06cc \u067e\u0627\u06a9\u0633\u0627\u0632\u06cc<\/p>\n<\/li>\n<li>\n<p>\u0627\u0633\u062a\u062b\u0646\u0627\u0626\u0627\u062a \u0631\u0627 \u062f\u0631 <code>__exit__<\/code><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0628\u0647\u06cc\u0646\u0647 \u0633\u0627\u0632\u06cc \u0639\u0645\u0644\u06a9\u0631\u062f<\/strong>:<\/p>\n<ul>\n<li>\n<p>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u0646 <code>__slots__<\/code> \u0628\u0631\u0627\u06cc \u0631\u0627\u0646\u062f\u0645\u0627\u0646 \u062d\u0627\u0641\u0638\u0647<\/p>\n<\/li>\n<li>\n<p>\u0645\u0642\u0627\u062f\u06cc\u0631 \u0645\u062d\u0627\u0633\u0628\u0647 \u0634\u062f\u0647 \u062f\u0631 \u0635\u0648\u0631\u062a \u0644\u0632\u0648\u0645<\/p>\n<\/li>\n<li>\n<p>\u062a\u0645\u0627\u0633 \u0647\u0627\u06cc \u0631\u0648\u0634 \u0631\u0627 \u062f\u0631 \u06a9\u062f \u0645\u062a\u062f\u0627\u0648\u0644 \u0628\u0647 \u062d\u062f\u0627\u0642\u0644 \u0628\u0631\u0633\u0627\u0646\u06cc\u062f<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3 id=\"heading-when-to-use-magic-methods\"><span class=\"ez-toc-section\" id=\"%da%86%d9%87_%d9%85%d9%88%d9%82%d8%b9_%d8%a7%d8%b2_%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c_%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c_%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87_%da%a9%d9%86%db%8c%d8%af\"><\/span><strong>\u0686\u0647 \u0645\u0648\u0642\u0639 \u0627\u0632 \u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u06cc\u0627\u0632 \u0628\u06cc\u0634\u062a\u0631 \u0645\u0641\u06cc\u062f \u0647\u0633\u062a\u0646\u062f:<\/p>\n<ol>\n<li>\n<p>\u0633\u0627\u062e\u062a\u0627\u0631\u0647\u0627\u06cc \u062f\u0627\u062f\u0647 \u0633\u0641\u0627\u0631\u0634\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/p>\n<\/li>\n<li>\n<p>\u0627\u0646\u0648\u0627\u0639 \u062e\u0627\u0635 \u062f\u0627\u0645\u0646\u0647 \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f<\/p>\n<\/li>\n<li>\n<p>\u0645\u0646\u0627\u0628\u0639 \u0631\u0627 \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u06cc\u062f<\/p>\n<\/li>\n<li>\n<p>\u0631\u0641\u062a\u0627\u0631 \u0648\u06cc\u0698\u0647 \u0627\u06cc \u0628\u0647 \u06a9\u0644\u0627\u0633\u0647\u0627\u06cc \u062e\u0648\u062f \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f<\/p>\n<\/li>\n<li>\n<p>\u06a9\u062f \u062e\u0648\u062f \u0631\u0627 \u0628\u06cc\u0634\u062a\u0631 \u0641\u06cc\u062b\u0648\u0646\u06cc \u06a9\u0646\u06cc\u062f<\/p>\n<\/li>\n<\/ol>\n<h3 id=\"heading-when-to-avoid-magic-methods\"><span class=\"ez-toc-section\" id=\"%da%86%d9%87_%d9%85%d9%88%d9%82%d8%b9_%d8%a8%d8%a7%db%8c%d8%af_%d8%a7%d8%b2_%d8%b1%d9%88%d8%b4%d9%87%d8%a7%db%8c_%d8%ac%d8%a7%d8%af%d9%88%db%8c%db%8c_%d8%ac%d9%84%d9%88%da%af%db%8c%d8%b1%db%8c_%da%a9%d9%86%db%8c%d9%85\"><\/span><strong>\u0686\u0647 \u0645\u0648\u0642\u0639 \u0628\u0627\u06cc\u062f \u0627\u0632 \u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u06a9\u0646\u06cc\u0645<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u0632 \u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u06a9\u0646\u06cc\u062f \u0648\u0642\u062a\u06cc:<\/p>\n<ol>\n<li>\n<p>\u062f\u0633\u062a\u0631\u0633\u06cc \u0633\u0627\u062f\u0647 \u0628\u0647 \u0648\u06cc\u0698\u06af\u06cc \u06a9\u0627\u0641\u06cc \u0627\u0633\u062a<\/p>\n<\/li>\n<li>\n<p>\u0631\u0641\u062a\u0627\u0631 \u06af\u06cc\u062c \u06a9\u0646\u0646\u062f\u0647 \u06cc\u0627 \u063a\u06cc\u0631 \u0645\u0646\u062a\u0638\u0631\u0647 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f<\/p>\n<\/li>\n<li>\n<p>\u0639\u0645\u0644\u06a9\u0631\u062f \u0628\u0633\u06cc\u0627\u0631 \u0645\u0647\u0645 \u0627\u0633\u062a \u0648 \u0631\u0648\u0634 \u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u0633\u0631\u0628\u0627\u0631 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u0646\u062f<\/p>\n<\/li>\n<li>\n<p>\u0627\u062c\u0631\u0627\u06cc \u0628\u06cc\u0634 \u0627\u0632 \u062d\u062f \u067e\u06cc\u0686\u06cc\u062f\u0647 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f<\/p>\n<\/li>\n<\/ol>\n<p>\u0628\u0647 \u06cc\u0627\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u06a9\u0647 \u0628\u0627 \u0642\u062f\u0631\u062a \u0639\u0627\u0644\u06cc \u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u0628\u0632\u0631\u06af\u06cc \u0628\u0647 \u0647\u0645\u0631\u0627\u0647 \u062f\u0627\u0631\u062f. \u0628\u0627 \u062a\u0648\u062c\u0647 \u0628\u0647 \u067e\u06cc\u0627\u0645\u062f\u0647\u0627\u06cc \u0639\u0645\u0644\u06a9\u0631\u062f \u0622\u0646\u0647\u0627 \u0648 \u0627\u0635\u0644 \u06a9\u0645\u062a\u0631\u06cc\u0646 \u062a\u0639\u062c\u0628 \u0627\u0632 \u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f. \u062f\u0631 \u0635\u0648\u0631\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u0646\u0627\u0633\u0628 \u060c \u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u062e\u0648\u0627\u0646\u0627\u06cc\u06cc \u0648 \u0628\u06cc\u0627\u0646 \u06a9\u062f \u0634\u0645\u0627 \u0631\u0627 \u0628\u0647 \u0645\u06cc\u0632\u0627\u0646 \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u0647\u06cc \u0627\u0641\u0632\u0627\u06cc\u0634 \u062f\u0647\u0646\u062f.<\/p>\n<h2 id=\"heading-references-and-further-reading\"><span class=\"ez-toc-section\" id=\"%d9%85%d9%86%d8%a7%d8%a8%d8%b9_%d9%88_%d8%ae%d9%88%d8%a7%d9%86%d8%af%d9%86_%d8%a8%db%8c%d8%b4%d8%aa%d8%b1\"><\/span><strong>\u0645\u0646\u0627\u0628\u0639 \u0648 \u062e\u0648\u0627\u0646\u062f\u0646 \u0628\u06cc\u0634\u062a\u0631<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3 id=\"heading-official-python-documentation\"><span class=\"ez-toc-section\" id=\"%d9%be%db%8c%d8%aa%d9%88%d9%86_%d8%b1%d8%b3%d9%85%db%8c_documentation\"><\/span><strong>\u067e\u06cc\u062a\u0648\u0646 \u0631\u0633\u0645\u06cc Documentation<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ol>\n<li>\n<p>\u0645\u062f\u0644 \u062f\u0627\u062f\u0647 \u067e\u0627\u06cc\u062a\u0648\u0646 &#8211; \u0631\u0633\u0645\u06cc Documentation &#8211; \u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u062c\u0627\u0645\u0639 \u0628\u0631\u0627\u06cc \u0645\u062f\u0644 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u067e\u0627\u06cc\u062a\u0648\u0646 \u0648 \u0631\u0648\u0634 \u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc.<\/p>\n<\/li>\n<li>\n<p>functools.total_ordering &#8211; Documentation \u0628\u0631\u0627\u06cc \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631 Total_ordering \u06a9\u0647 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0631\u0648\u0634 \u0647\u0627\u06cc \u0645\u0642\u0627\u06cc\u0633\u0647 \u0627\u0632 \u062f\u0633\u062a \u0631\u0641\u062a\u0647 \u0631\u0627 \u067e\u0631 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<\/li>\n<li>\n<p>\u0646\u0627\u0645 \u0631\u0648\u0634\u0647\u0627\u06cc \u0648\u06cc\u0698\u0647 \u067e\u0627\u06cc\u062a\u0648\u0646 &#8211; \u0645\u0631\u062c\u0639 \u0631\u0633\u0645\u06cc \u0628\u0631\u0627\u06cc \u0634\u0646\u0627\u0633\u0647 \u0647\u0627\u06cc \u0631\u0648\u0634 \u0648\u06cc\u0698\u0647 \u062f\u0631 \u067e\u0627\u06cc\u062a\u0648\u0646.<\/p>\n<\/li>\n<li>\n<p>\u0645\u062c\u0645\u0648\u0639\u0647 \u06a9\u0644\u0627\u0633\u0647\u0627\u06cc \u067e\u0627\u06cc\u0647 \u0686\u06a9\u06cc\u062f\u0647 &#8211; \u062f\u0631 \u0645\u0648\u0631\u062f \u06a9\u0644\u0627\u0633\u0647\u0627\u06cc \u067e\u0627\u06cc\u0647 \u0627\u0646\u062a\u0632\u0627\u0639\u06cc \u0628\u0631\u0627\u06cc \u0638\u0631\u0648\u0641 \u06a9\u0647 \u0631\u0627\u0628\u0637 \u0647\u0627\u06cc\u06cc \u0631\u0627 \u06a9\u0647 \u0634\u0645\u0627 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u0646\u062f \u060c \u0628\u06cc\u0627\u0645\u0648\u0632\u06cc\u062f container \u06a9\u0644\u0627\u0633 \u0647\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u0646\u062f.<\/p>\n<\/li>\n<\/ol>\n<h3 id=\"heading-community-resources\"><span class=\"ez-toc-section\" id=\"%d9%85%d9%86%d8%a7%d8%a8%d8%b9_%d8%ac%d8%a7%d9%85%d8%b9%d9%87\"><\/span><strong>\u0645\u0646\u0627\u0628\u0639 \u062c\u0627\u0645\u0639\u0647<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ol start=\"5\">\n<li>\u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u067e\u0627\u06cc\u062a\u0648\u0646 &#8211; Rafe Kettler &#8211; \u0646\u0645\u0648\u0646\u0647 \u0647\u0627\u06cc \u0639\u0645\u0644\u06cc \u0631\u0648\u0634 \u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u0648 \u0645\u0648\u0627\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u0634\u062a\u0631\u06a9.<\/li>\n<\/ol>\n<h3 id=\"heading-further-reading\"><span class=\"ez-toc-section\" id=\"%d8%ae%d9%88%d8%a7%d9%86%d8%af%d9%86_%d8%a8%db%8c%d8%b4%d8%aa%d8%b1\"><\/span><strong>\u062e\u0648\u0627\u0646\u062f\u0646 \u0628\u06cc\u0634\u062a\u0631<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u06af\u0631 \u0627\u0632 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0644\u0630\u062a \u0628\u0631\u062f\u06cc\u062f \u060c \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0627\u062a \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u067e\u0627\u06cc\u062a\u0648\u0646 \u0631\u0627 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u06cc\u062f \u0631\u0648\u06cc \u0648\u0628\u0644\u0627\u06af \u0634\u062e\u0635\u06cc \u0645\u0646 \u0645\u0641\u06cc\u062f \u0627\u0633\u062a:<\/p>\n<ol>\n<li>\n<p>\u0622\u0632\u0645\u0627\u06cc\u0634 \u0647\u0627\u06cc \u0639\u0645\u0644\u06cc \u0628\u0631\u0627\u06cc \u0628\u0647\u06cc\u0646\u0647 \u0633\u0627\u0632\u06cc \u067e\u0631\u0633 \u0648 \u062c\u0648 Django ORM &#8211; \u06cc\u0627\u062f \u0628\u06af\u06cc\u0631\u06cc\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc Django ORM \u062e\u0648\u062f \u0631\u0627 \u0628\u0627 \u0646\u0645\u0648\u0646\u0647 \u0647\u0627 \u0648 \u0622\u0632\u0645\u0627\u06cc\u0634\u0627\u062a \u0639\u0645\u0644\u06cc \u0628\u0647\u06cc\u0646\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<\/li>\n<li>\n<p>\u0647\u0632\u06cc\u0646\u0647 \u0628\u0627\u0644\u0627\u06cc UWSGI \u0647\u0645\u0632\u0645\u0627\u0646 &#8211; \u067e\u06cc\u0627\u0645\u062f\u0647\u0627\u06cc \u0639\u0645\u0644\u06a9\u0631\u062f \u067e\u0631\u062f\u0627\u0632\u0634 \u0647\u0645\u0632\u0645\u0627\u0646 \u062f\u0631 UWSGI \u0648 \u0686\u06af\u0648\u0646\u06af\u06cc \u062a\u0623\u062b\u06cc\u0631 \u0622\u0646 \u0628\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0648\u0628 \u067e\u0627\u06cc\u062a\u0648\u0646 \u0634\u0645\u0627 \u0631\u0627 \u062f\u0631\u06a9 \u06a9\u0646\u06cc\u062f.<\/p>\n<\/li>\n<\/ol>\n<\/section>\n<p><br \/>\n<br \/>\u0645\u0646\u062a\u0634\u0631 \u0634\u062f\u0647 \u062f\u0631 1404-03-21 00:17:09<br \/>\n<\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-center kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;center&quot;,&quot;id&quot;:&quot;18860&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;0&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;0&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;5&quot;,&quot;greet&quot;:&quot;\u0627\u0645\u062a\u06cc\u0627\u0632 \u0634\u0645\u0627 \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0637\u0644\u0628&quot;,&quot;legend&quot;:&quot;0\\\/5 (0 \u0631\u0627\u06cc)&quot;,&quot;size&quot;:&quot;30&quot;,&quot;title&quot;:&quot;\u0686\u06af\u0648\u0646\u0647 \u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u067e\u0627\u06cc\u062a\u0648\u0646 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u0646\u062f: \u06cc\u06a9 \u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u0639\u0645\u0644\u06cc&quot;,&quot;width&quot;:&quot;0&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ({count} \u0631\u0627\u06cc)&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 0px;\">\n            <div class=\"kksr-star\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 24px;\">\n            <span class=\"kksr-muted\">\u0627\u0645\u062a\u06cc\u0627\u0632 \u0634\u0645\u0627 \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0637\u0644\u0628<\/span>\n    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">\u0632\u0645\u0627\u0646 \u0644\u0627\u0632\u0645 \u0628\u0631\u0627\u06cc \u0645\u0637\u0627\u0644\u0639\u0647: <\/span> <span class=\"rt-time\"> 21<\/span> <span class=\"rt-label rt-postfix\">\u062f\u0642\u06cc\u0642\u0647<\/span><\/span>\u0622\u06cc\u0627 \u062a\u0627 \u0628\u0647 \u062d\u0627\u0644 \u0641\u06a9\u0631 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u067e\u0627\u06cc\u062a\u0648\u0646 \u0628\u0627\u0639\u062b \u0645\u06cc \u0634\u0648\u062f \u0627\u0634\u06cc\u0627\u0621 \u0628\u0627 \u0627\u067e\u0631\u0627\u062a\u0648\u0631\u0647\u0627 \u0645\u0627\u0646\u0646\u062f \u06a9\u0627\u0631 \u06a9\u0646\u0646\u062f + \u06cc\u0627 -\u061f \u06cc\u0627 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062f\u0627\u0646\u062f \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0634\u06cc\u0627\u0621 \u0631\u0627 \u062f\u0631 \u0647\u0646\u06af\u0627\u0645 \u0634\u0645\u0627 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0647\u06cc\u062f print \u0622\u0646\u0647\u0627\u061f \u067e\u0627\u0633\u062e \u062f\u0631 \u0631\u0648\u0634\u0647\u0627\u06cc \u062c\u0627\u062f\u0648\u06cc\u06cc \u067e\u0627\u06cc\u062a\u0648\u0646 \u060c \u06a9\u0647 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 Dunder \u0646\u06cc\u0632 \u0634\u0646\u0627\u062e\u062a\u0647 \u0645\u06cc \u0634\u0648\u062f \u0646\u0647\u0641\u062a\u0647 \u0627\u0633\u062a (D\u0627\u0648\u062c [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":18861,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1743],"tags":[5927,1958,1844,1926,1744,1959,2782,1822,1759,2781,2001,1863,1956,2425,1790,1745,1813],"class_list":["post-18860","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python","tag-5927","tag-1958","tag-1844","tag-1926","tag-1744","tag-1959","tag-2782","tag-1822","tag-1759","tag-2781","tag---python","tag-1863","tag-1956","tag-2425","tag-1790","tag-1745","tag-1813"],"acf":[],"_links":{"self":[{"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/posts\/18860","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/comments?post=18860"}],"version-history":[{"count":0,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/posts\/18860\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/media\/18861"}],"wp:attachment":[{"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/media?parent=18860"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/categories?post=18860"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/tags?post=18860"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}