Dunder methods ("double underscore," pia kuwa magic/special methods) ni metodi zilizo na majina maalum kama __init__, __str__, ambazo zinaruhusu vitu vyako kuunganisha na . Python huitaji kiotomatiki kulingana na sintaksia — k.m. huitaji .
__len__len(obj)obj.__len__()class Vector:
def __init__(self, x, y): # constructor — Vector(1, 2)
self.x, self.y = x, y
def __repr__(self): # repr(v) and the REPL — for developers
return f"Vector({self.x}, {self.y})"
def __str__(self): # str(v) / print(v) — for users
return f"({self.x}, {self.y})"
def __add__(self, other): # enables the + operator: v1 + v2
return Vector(self.x + other.x, self.y + other.y)
def __eq__(self, other): # enables ==
return self.x == other.x and self.y == other.y
v1, v2 = Vector(1, 2), Vector(3, 4)
v1 + v2 # Vector(4, 6) — calls __add__
print(v1) # (1, 2) — calls __str__
v1 == Vector(1, 2) # True — calls __eq__
Kufafanua hizi kunakuruhusu vitu vyako vilivyo maalum kufanya kazi na sintaksia ya kujenga (+, ==, print) kama vile aina za kujenga.
__init__ → constructor (object creation)
__repr__ → unambiguous developer representation (debugging, REPL)
__str__ → readable user-facing string (print, str())
__len__ → len(obj)
__getitem__→ obj[key] (indexing/subscripting)
__iter__ / __next__ → make an object iterable (for loops)
__eq__, __lt__, __gt__ → comparison operators (==, <, >)
__add__, __sub__, __mul__ → arithmetic operators
__call__ → make an instance callable like a function: obj()
__contains__ → the `in` operator
__enter__ / __exit__ → context managers (with statement)
class Deck:
def __init__(self): self.cards = [...]
def __len__(self): return len(self.cards) # len(deck)
def __getitem__(self, i): return self.cards[i] # deck[0], and iteration/slicing!
deck = Deck()
len(deck) # works
for card in deck: # __getitem__ makes it iterable too
...
Kutekeleza __len__ na __getitem__ kunafanya kitu kujibu kama mlolongo — kinastakabadhi len(), kufafanua kwa faharasa, kuunganisha, na kukata.
Dunder methods ni jinsi Python inavyofikiri yake "kila kitu ni kitu" — zinaruhusu darasa lako maalum kuunganisha bila shida na waendeshaji wa lugha na vitendo vya kujenga (+, ==, len(), for, [], with, print).
Hii ni msingi wa muundo wa Python unaokutana, wa polymorphic ("duck typing" + mtindo wa data).
Kujua dunder kuu — haswa __init__, __repr__/__str__, waendeshaji wa kulinganisha na hisabati, na itifaki ya kuunganisha — inakuruhusu kujenga darasa lenye akili, licha tosha ambalo linaonekana kama aina za kujenga, na kuelezea jinsi sintaksia ya lugha inavyoandikwa kwa hofu ya vitendo chini ya kinyumba.
Maktaba ya maswali ya mahojiano ya IT yenye majibu ya kina — kutoka Junior hadi Senior.
Changia