Python / Тусгай методууд (__init__, __str__)

Тусгай методууд (init, str)

Python класс дотор зарим методуудыг хоёр доогуур зураасаар (__) эхэлж, төгсгөдөг. Эдгээрийг dunder methods (double underscore) эсвэл magic methods гэж нэрлэдэг. Та аль хэдийн __init__ ашигласан — энэ хичээлд тэдгээрийн цаана юу байдгийг нарийвчлан судална.

init — объект үүсгэх

__init__ нь класснаас объект үүсгэх үед автоматаар дуудагдах метод юм. JavaScript-ийн constructor шиг ажилладаг.

python
class Сурагч:
    def __init__(self, нэр, нас):
        self.нэр = нэр
        self.нас = нас
        self.xp = 0          # анхны утга тогтоох

сурагч = Сурагч("Болд", 20)
print(сурагч.нэр)   # Болд
print(сурагч.xp)    # 0

self гэдэг нь тухайн объект өөрийгөө илэрхийлнэ. self.нэр = нэр гэдэг нь "энэ объектын нэр атрибутад дамжуулсан утгыг хадгал" гэсэн үг.

str — объектыг текстээр харуулах

print() функц объектыг хэвлэхэд __str__ методыг дуудна. Хэрэв та __str__ тодорхойлохгүй бол Python хаягийн мэдээлэл харуулдаг — хэрэглэгчид ойлгомжгүй.

python
class Сурагч:
    def __init__(self, нэр, нас):
        self.нэр = нэр
        self.нас = нас
        self.xp = 0

    def __str__(self):
        return f"Сурагч: {self.нэр} ({self.нас} нас) — {self.xp} XP"

сурагч = Сурагч("Сарнай", 22)
print(сурагч)
# Сурагч: Сарнай (22 нас) — 0 XP

__str__ нь заавал string буцаана. Энэ нь хэрэглэгчдэд зориулсан харуулалт.

repr — хөгжүүлэгчид зориулсан харуулалт

__repr__ нь __str__-тэй төстэй боловч хөгжүүлэгчид зориулсан илүү нарийвчилсан мэдээлэл өгдөг. Python console дотор объектыг шалгахад ашиглагдана.

python
class Сурагч:
    def __init__(self, нэр, нас):
        self.нэр = нэр
        self.нас = нас

    def __str__(self):
        return f"{self.нэр}"

    def __repr__(self):
        return f"Сурагч(нэр='{self.нэр}', нас={self.нас})"

сурагч = Сурагч("Төгс", 19)
print(str(сурагч))    # Төгс
print(repr(сурагч))   # Сурагч(нэр='Төгс', нас=19)

Бусад хэрэгтэй dunder методууд

Python-д өөр олон dunder метод байдаг:

| Метод | Дуудагдах үе | | --- | --- | | __len__ | len(объект) дуудахад | | __eq__ | == оператор ашиглахад | | __lt__ | < оператор ашиглахад | | __add__ | + оператор ашиглахад | | __del__ | объект устгагдахад |

python
class Дүй:
    def __init__(self, утга):
        self.утга = утга

    def __eq__(self, бусад):
        return self.утга == бусад.утга

    def __add__(self, бусад):
        return Дүй(self.утга + бусад.утга)

    def __str__(self):
        return str(self.утга)

а = Дүй(10)
б = Дүй(10)
в = Дүй(5)

print(а == б)       # True
print(а == в)       # False
print(а + в)        # 15

Эдгээр методуудыг ашигласнаар таны класс Python-ий нэгдсэн хэлбэрт нийцнэ — стандарт операторуудыг дэмжинэ.

Дараагийн хичээлд:

Iterator ба Generator — давтагдах объект хэрхэн үүсгэх, yield түлхүүр үг хэрхэн ажилладаг талаар үзнэ.