Сыйкырдуу (dunder) методдор
Өз класстарыңызды Python-дун камтылган синтаксисине туташтырыңыз
__str__ же __eq__ сыяктуу атайын аталган метод, аны Python print(obj), a == b, len(obj) же a + b сыяктуу кадимки синтаксисти колдонгонуңузда сиздин ордуңузга чакырат. Сиз аларды дээрлик эч качан аты менен чакырбайсыз; аларды объектилериңиз камтылган типтердей иштеши үчүн аныктайсыз.
- dunder-методдор эмне экенин жана Python аларды качан чакырарын түшүндүрө аласыз,
- объектилерге
__repr__жана__str__аркылуу окулуучу түр бере аласыз, __eq__аркылуу маани боюнча теңдикти аныктай аласыз,__len__аркылууlen()жана чындык текшерүүсүн иштете аласыз,__add__жана__mul__аркылуу+жана*операторлорун кайра жүктөй аласыз,NotImplementedжана теңдик менен хештөө байланышын кошо алганда компромисстерди баалай аласыз.
1. Dunder-метод деген эмне?
Сиз a + b, len(x) же print(obj) деп жазган сайын, Python бул синтаксисти байкатпай объектинин методун чакырууга айлантат. Мындай методдордун аттары кош асты сызык менен курчалган — __add__, __len__, __str__ — ошондуктан программисттер аларды "dunder" (double-under) деп аташат. Аларды дагы атайын методдор деп аташат.
Салыштыруу: dunder-методдорду дубалдагы электр розеткалары катары элестетиңиз. Дубал (Python) стандарттуу розетка аркылуу кубат берүүнү мурдатан билет. Класс туура розетканы — методдун туура атын жана формасын — берген кезде, камтылган механизм түз эле туташат. Сиз үйдүн зымдарын кайра тартпайсыз; сиз жөн гана стандарттуу штепселди сайасыз, ошондо len(), == жана print() объектиңиз менен эмне кыларын билет.
Негизги ой жүгүртүү модели: сиз dunder-методдорду дээрлик эч качан түз чакырбайсыз. Сиз табигый синтаксисти жазасыз, а Python чакырууну керектүү dunder-ге өзү багыттайт. obj.__len__() деп жазуу иштейт, бирок бүт максат — жөн гана len(obj) деп жаза алууда.