Тусгай методууд (init, str)
Python класс дотор зарим методуудыг хоёр доогуур зураасаар (__) эхэлж, төгсгөдөг. Эдгээрийг dunder methods (double underscore) эсвэл magic methods гэж нэрлэдэг. Та аль хэдийн __init__ ашигласан — энэ хичээлд тэдгээрийн цаана юу байдгийг нарийвчлан судална.
init — объект үүсгэх
__init__ нь класснаас объект үүсгэх үед автоматаар дуудагдах метод юм. JavaScript-ийн constructor шиг ажилладаг.
class Сурагч:
def __init__(self, нэр, нас):
self.нэр = нэр
self.нас = нас
self.xp = 0 # анхны утга тогтоох
сурагч = Сурагч("Болд", 20)
print(сурагч.нэр) # Болд
print(сурагч.xp) # 0
self гэдэг нь тухайн объект өөрийгөө илэрхийлнэ. self.нэр = нэр гэдэг нь "энэ объектын нэр атрибутад дамжуулсан утгыг хадгал" гэсэн үг.
str — объектыг текстээр харуулах
print() функц объектыг хэвлэхэд __str__ методыг дуудна. Хэрэв та __str__ тодорхойлохгүй бол 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 дотор объектыг шалгахад ашиглагдана.
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__ | объект устгагдахад |
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 түлхүүр үг хэрхэн ажилладаг талаар үзнэ.