Ачааллж байна...
Түвшин 4: Том зураг — сүүлчийн Түвшинд тавтай морил. Энэ Түвшин таныг Python-ы хамгийн гүн, хамгийн үзэсгэлэнтэй санаатай уулзуулна: class ба object. Эхлээд нэг зүйлийг нүүр тулан хэлье: энэ бол бүхэл сургалтын хамгийн хийсвэр ойлголт — variable шиг "хайрцаг", loop шиг "тойрог" гээд гараар барьчихмаар зүйрлэлд тэр даруй ордоггүй, ихэнх сурагчид хэд хэдэн уулзалтын дараа л "суудаг" сэдэв. Тиймээс бид энэ бүлэгт хамгийн удаан хэмнэлээ сонгоно — тэгээд өнөөдрийн хичээлд нэг ч мөр шинэ код байхгүй: зөвхөн санаа. Бичиглэл нь маргаашнаас — өнөөдөр бид "юуг сурах гэж байгаагаа" ойлгоно: санаа нь суусан хүнд бичиглэл нь ердөө л хэлбэр болдог, санаагүй хүнд бичиглэл нь ид шидийн тарни шиг харагддаг юм.
Гэхдээ нэг тайвшруулах нууц байна — энэ хичээлийн гол мэдээ нь энэ: class бол танд огт шинэ зүйл биш. Та object-уудтай анхны хичээлээсээ хойш өдөр бүр ажиллаж ирсэн: таны үүсгэсэн string болгон, list болгон, dictionary болгон — бүгд object байсан; string-ийн "авдар" гэж бидний нэрлэж ирсэн зүйл, цэгэн дуудлага, огнооны .year — бүгд энэ ертөнцийн үзэгдлүүд. Бүлэг 9-д "цэгний цаана Python-ы дараагийн том санаа нуугдаж байгаа — Бүлэг 14-т дэлгэнэ" гэж, string-ийн үл өөрчлөгдөх байдлын "яагаад"-ыг ч, list-ийн "савыг дамжуулах" нарийн зан үйлийг ч мөн энд амласан. Function-ий бүлэгт "та багаж хэрэглэгчээс бүтээгч болсон" гэж хэлсэн шиг — энэ бүлэгт та object хэрэглэгчээс object бүтээгч болно: өнөөдөр эхлээд "object гэж чухам юу юм бэ" гэдгийг харцгаая.
Автомашины үйлдвэр төсөөлөөрэй. Үйлдвэрийн инженерийн өрөөнд нэг зураг төсөл (blueprint) хадгалагдаж байдаг — том цаасан дээрх нарийн зураглал: "энэ загварын машин дөрвөн дугуйтай, ийм хэлбэрийн их биетэй, хоёр өнгийн сонголттой, хөдөлгүүр нь ийм, суудал нь тийм..." Энэ цаас юу вэ гэдгийг сайн ажиглаарай. Нэгд: цаас өөрөө машин биш — түүгээр хаашаа ч явахгүй, суудалд нь суухгүй, түлш хийхгүй: тэр бол машин гэдэг юмны тодорхойлолт — "энэ загварын машин болгон ямар эд ангитай, юу чаддаг байх вэ" гэсэн бүрэн дүрслэл. Хоёрт: цаас нэг л ширхэг байхад хангалттай — гэтэл түүгээр үйлдвэр мянга мянган жинхэнэ машин угсарна: нэг тодорхойлолт — тоо томшгүй биелэл. Гуравт — хамгийн нарийн ажиглалт: цаасан дээр "өнгө: ___" гэсэн нүх бий (function-ий parameter, f-string-ийн нүх — таны хуучин танил санаа!): зураг төсөл "өнгөтэй байна" гэдгийг заадаг ч "ямар өнгөтэйг" заадаггүй — тэр нь машин бүр угсрагдахдаа өөрөө авдаг зүйл: конвейерээс улаан машин ч бууна, хөх ч бууна — хоёул нэг зураг төслийн, гэхдээ өөр өөр жинхэнэ машинууд: нэг нь шаварт унасан ч нөгөө нь цэвэрхэн хэвээрээ — тус тусын амьдралтай, тус тусын байдалтай.
Одоо хоёр үгээ энэ зургаас авъя. Зураг төсөл — тэр ганц цаас — бол class: "энэ төрлийн юм болгон юутай, юу чаддаг вэ" гэсэн тодорхойлолт. Конвейерээс буусан жинхэнэ машин болгон — бол object (заримдаа instance буюу "биелэл" гэж бас нэрлэдэг): тодорхойлолтын дагуу бүтээгдсэн, өөрийн гэсэн утгуудтай (өөрийн өнгө, өөрийн дугаар), өөрийн амьдралтай бодит юм. Хоёрын харьцааг гурван богино өгүүлбэрт: class бол тодорхойлолт, object бол биелэл; class нэг, object олон; class юу ч "хийдэггүй" — ажиллдаг нь object.
Хийсвэр санааг хоёр дахь, гэрийн зүйрлэлээр бататгая — жигнэмэгийн хэв. Гал тогооны шургуулгад одтой хэлбэрийн төмөр хэв хэвтэж байна: түүгээр зуурсан гурилаа дарахад — одтой жигнэмэг. Дахин дарахад — бас нэг. Арван удаа — арван жигнэмэг: бүгд ижил хэлбэртэй (нэг хэвийн "үр удам" учраас), гэхдээ тус тусдаа бодит юмс: нэгийг нь шоколадаар чимж, нөгөөг нь чихрийн нунтгаар — нэгийг нь идчихэд бусад нь ганц ч хорохгүй. Тэгээд хамгийн чухал нь: хэвийг өөрийг нь идэж болохгүй — хэв бол жигнэмэг биш: хэлбэр үйлдвэрлэгч нь. Хэв = class, жигнэмэгүүд = object-ууд. Энэ зүйрлэл нэг зүйлийг машин зураг төслөөс илүү тод харуулдаг: үйлдвэрлэлийн хөдөлгөөнийг — хэвээ гурилан дээр "дарах" тэр агшин: class-аас object "мэндлэх" тусгай агшин гэж байдаг (бичиглэлийнх нь нэр init — маргаашийн гол баатар) — object бүр тэр даралтын үрээр төрдөг.
Хоёр зүйрлэлээ мөр зэрэгцүүлье: зураг төсөл/машинууд — "нэг тодорхойлолт, өөр өөр утгатай олон биелэл"-ийг; хэв/жигнэмэгүүд — "үйлдвэрлэх хөдөлгөөн, биелэлүүдийн бие даасан байдлыг" тодруулж байна: хоёулаа нэг л санааны хоёр гэрэл.
Хийсвэр санааг хамгийн хатуу газартай холбоё. Дараах өгүүлбэрийг удаан уншаарай: str бол class. Таны бичсэн string болгон — тэр class-ын object байсан. "Бат" гэж бичихэд юу болж байсныг шинэ нүдээр харцгаая: Python-ы дотор str гэдэг "зураг төсөл" бий — "string болгон тэмдэгтүүдийн дараалал тээнэ, урттай байна, upper/lower/strip... гэсэн авдартай явна" гэсэн тодорхойлолт: та "Бат" гэж бичих агшинд тэр зураг төслөөс нэг жинхэнэ машин угсрагдаж (хэв гурилан дээр дарагдаж!) — тодорхойлолтын бүх чадвартай, гэхдээ өөрийн утгатай ("Бат" гэсэн гурван тэмдэгт — "өөрийн өнгө"!) object мэндэлдэг байжээ. Одоо олон эртний оньсого нэг дор тайлагдана. "Авдар" хаанаас ирдэг байсан бэ? — зураг төслөөс: str class-д upper тодорхойлогдсон учраас string болгон (ямар ч утгатай нь!) upper-тэй төрдөг: авдар нь object бүрд "дагалддагийн" учир — бүгд нэг хэвийн үр удам. Цэг ямар утгатай байсан бэ? — ner.upper() гэдэг нь "ner гэдэг object-ын өөрийнх нь чадварыг ажиллуул": цэг бол "энэ биелэлийн" гэсэн заалт. Type() юуг хэлдэг байсан бэ? — <class 'str'> гэсэн хариултын тэр 'class' гэдэг үгийг та Бүлэг 5-аас хойш зуу дахин харсан: type бол "энэ object аль зураг төслийн бүтээгдэхүүн бэ" гэж асуудаг багаж байжээ — шошго уншигч маань үнэндээ үйлдвэрийн пасспорт уншигч байсан юм. List, dictionary, огнооны date, бүр модуль хүртэл — бүгд өөр өөрийн class-ын object-ууд: Python-д таны барьж байсан бүх утга object байсан — та энэ ертөнцийг шинээр сурахгүй: аль хэдийн амьдарч байснаа нэрлэж сурч байна.
Тэгээд string ба list-ийн зан үйлийн зөрүү ч энд гэрэлтэнэ: "string method шинийг гардуулдаг, list method дотроо өөрчилдөг" гэсэн хоёр ертөнц — учир нь тэр хоёр өөр зураг төслийн бүтээгдэхүүн: str-ийн зураг төсөлд "энэ загварын машин угсрагдсанаасаа хойш өөрчлөгддөггүй" гэж, list-ийнхэд "энэ загвар нь өөрчилж болдог ачааны тэвштэй" гэж бичээстэй байжээ: зан чанар нь object-ынх биш — class-аас удамшдаг.
Хүсвэл туршаад үзээрэй — кодгүй хичээлийн кодгүй дасгал: эргэн тойрноо хараад "class ба object" хосуудыг амьдралаас ол — таван минутын тоглоом: айлын байшингууд ба тэдний нэг зураг төсөл; таны ангийн бүх сурагч ба "сурагчийн анкет" гэдэг маягт (нэг маягт — бөглөсөн хувь болгон өөр!); мөнгөн дэвсгэрт ба түүний хэв... Маягтын жишээ бол үнэндээ гурав дахь сонгодог зүйрлэл: хоосон маягт = class, бөглөгдсөн хувь болгон = object — "нүхнүүд" нь хамгийн ил харагддаг хувилбар. Сонирхвол Python дээрээ print(type("Бат")), print(type([1, 2])), print(type(3.14)) гурвыг хэвлээд гарцын 'class' гэдэг үгийг шинэ нүдээрээ уншаарай — өнөөдрийн бүх яриаг Python өөрөө гурван мөрөнд гэрчилнэ.
[ЗУРАГ 1: Хүсвэл энд "зураг төсөл → гурван машин" диаграм оруулж болно: зүүн талд нэг цаасан зураг төсөл (class), баруун талд түүнээс гарсан гурван өөр өнгийн машин (object-ууд), сум нь үйлдвэрлэлийг заасан — хэрэгтэй бол надаас "диаграмаа үүсгээд өг" гэж хүсээрэй]
Кодгүй хичээлийн "алдаанууд" нь ойлголтынх — энэ сэдвийн эргэн тойрны гурван түгээмэл ташаа төсөөлөл: маргаашийн бичиглэлд орохоос өмнө засчихвал зам цэвэрхэн болно.
Ташаа төсөөлөл 1: "Class бол object-уудын цуглуулга/сав." Хамгийн элбэг андуурал: "class нь машинуудаа дотроо хадгалдаг юм байх" — үгүй: зураг төсөл угсарсан машинуудаа мэддэггүй, тоолдоггүй, хадгалдаггүй — конвейерээс буусан машин зураг төслөөс бүрэн тасардаг: хаана очих, юу болох нь өөрийнх нь (эзнийх нь) хэрэг. "Object-уудын цуглуулга" гэдэг ажлыг өөр танил хэрэгсэл хийдэг — list! (гурван нохой object-ыг list-д хийж болно — маргаашаас!): class бол сав биш — эх загвар.
Ташаа төсөөлөл 2: "Class гэдэг нь хэцүү программуудын л хэрэгсэл — надад хэрэггүй байх." Урвуугаар нь: та class-гүйгээр нэг ч хоног Python бичиж чадахгүй байсан — string, list, тоо: бүгд class-ын үр. Маргаашаас сурах зүйл бол "class хэрэглэх" биш (аль хэдийн хэрэглэдэг!) — өөрийн class зохиох: Python-ы бэлэн зураг төслүүд (str, list...) "ерөнхий" юмсын загвар байдаг бол таны программд таны ертөнцийн юмс хэрэгтэй болдог: "сурагч" (нэр, оноотой), "харилцагч" (нэр, дугаартай), "нохой" (нэр, настай — маргаашийн жишээ!) — өөрийн юмсаа тодорхойлж чаддаг болох нь энэ бүлгийн бэлэг.
Ташаа төсөөлөл 3: "Object бол ямар нэг тусгай, шинэ төрлийн утга." Урвуу тал руугаа алдах нь: "variable, string хуучин юм — object гэдэг шинэ юм ирлээ" — үгүй: object бол таны мэддэг утгуудын дээрх шинэ нэр биш — тэдний жинхэнэ нэр: "Бат" гэдэг string = нэг object; түүнийг ner хайрцганд хийхэд — variable нь object-ыг заадаг нэр; f-string-ийн нүхэнд суулгахад — object хэвлэгдэж байгаа нь... Юу ч өөрчлөгдөөгүй — зөвхөн таны үгсийн сан ертөнцийнхөө жинхэнэ зохион байгуулалтад хүрч очлоо: мужааны шавь "эд ангиудын нэрс" сурсан тэр өдөртэй адил өдөр өнөөдөр.
Class бол тодорхойлолт — "энэ төрлийн юм болгон юутай, юу чаддаг вэ" гэсэн зураг төсөл; object бол биелэл — тэр төслөөр бүтсэн, өөрийн утгуудтай бодит юм: class нэг — object олон.
Гурван зүйрлэл нэг санаанд: зураг төсөл ба машинууд, жигнэмэгийн хэв ба жигнэмэгүүд, маягт ба бөглөгдсөн хувиуд.
Та энэ ертөнцөд анхнаасаа амьдарч байсан: str, list, dict, date — бүгд class; таны бичсэн утга болгон — object; "авдар" нь class-аас удамшдаг, цэг нь "энэ object-ын" гэсэн заалт, type() нь "аль class-ынх вэ" гэсэн асуулт байжээ.
Class сав биш — эх загвар (цуглуулах ажил list-ийнх); object "шинэ төрлийн юм" биш — хуучин бүх утгын жинхэнэ нэр.
Маргаашаас та object хэрэглэгчээс object бүтээгч болно: өөрийн class бичнэ.
Дараагийн хичээлд санаа маань бичиглэл болно: анхны class-аа бичих — нэр, настай "Нохой" зураг төсөл зохиож, түүнээсээ анхны жинхэнэ нохойгоо "угсарна": class гэдэг үг, init гэдэг сонин нэртэй "хэв дарагч", тэгээд self гэдэг — шууд хэлье — дэлхийн бүх эхлэгчийг будилуулдаг жижигхэн үгтэй нүүр тулна: будилвал зөв замдаа явж байна гэсэн үг гэдгийг одооноос амлачихъя.
Бүртгэлтэй болсноор энэ сургалтын бүх хичээлд хандах эрх авна.