ماڈیول اسباق (3/4)
خصوصی طریقے (ڈنڈر)
خصوصی طریقے (جسے ڈنڈر طریقے کہتے ہیں کیونکہ وہ شروع اور ختم ہوتے ہیں۔
ڈبل انڈر سکور کے ساتھ: __name__) وہ ہکس ہیں جو آپ کی اشیاء کو اجازت دیتے ہیں
زبان کے ساتھ ضم کریں: متن کی نمائندگی، == کے ساتھ موازنہ،
len()، in، آپریٹرز وغیرہ کے لیے تعاون
آپ پہلے ہی ایک استعمال کر چکے ہیں: __init__۔
__str__ اور __repr__
وہ کنٹرول کرتے ہیں جو print() کے ساتھ اور REPL میں ظاہر ہوتا ہے۔
class Punto:
def __init__(self, x, y):
self.x = x
self.y = y
def __repr__(self):
return f"Punto({self.x}, {self.y})"
def __str__(self):
return f"({self.x}, {self.y})"
p = Punto(3, 4)
str(p) # '(3, 4)' — per umani
repr(p) # 'Punto(3, 4)' — per debugger / dev
print(p) # '(3, 4)'
p # Punto(3, 4) in REPL → repr
[p, p] # [Punto(3, 4), Punto(3, 4)] — sempre repr nei contenitoriاگر آپ صرف __repr__ کی وضاحت کرتے ہیں، تو ازگر اسے فال بیک کے طور پر بھی استعمال کرتا ہے
__str__
__eq__: نئے سرے سے وضاحت کرنا ==
بطور ڈیفالٹ a == b اشیاء کے شناخت کنندگان کا موازنہ کرتا ہے (is)، نہیں
ان کے مواد. ساختی موازنہ کے لیے، __eq__ کی وضاحت کریں:
class Punto:
def __init__(self, x, y):
self.x, self.y = x, y
def __eq__(self, other):
if not isinstance(other, Punto):
return NotImplemented
return (self.x, self.y) == (other.x, other.y)
Punto(1, 2) == Punto(1, 2) # True
Punto(1, 2) == Punto(3, 4) # Falseجب اقسام
ہیں موازنہ درست عمل نہیں ہے: ازگر پھر اس کے ساتھ کوشش کرے گا۔
دوسرے آپرینڈ کا __eq__۔
__len__: len() کے لئے تعاون
class Cesto:
def __init__(self):
self.frutti = []
def __len__(self):
return len(self.frutti)
c = Cesto()
c.frutti.append("mela")
len(c) # 1
bool(c) # True (len > 0)__len__ کی وضاحت کر کے، آپ کو بولین بھی مفت ملتا ہے: ایک چیز
len() == 0 کے ساتھ غلط ہو جاتا ہے۔
دیگر مفید ڈنڈرز (جائزہ)
__add__(self, other)→ دوبارہ وضاحت کرتا ہے+__lt__,__le__,__gt__,__ge__→ موازنہ آپریٹرز__contains__(self, item)→ سپورٹ کرتا ہےitem in self__iter__+__next__→ آبجیکٹ کو قابل تکرار بناتا ہے__getitem__(self, key)→ سپورٹ کرتا ہےself[key]__hash__→ ڈکٹ کلید / سیٹ عنصر ہونا ضروری ہے۔
آپ کی باری
__init__(self, amount, currency) اور __str__ کے ساتھ `Money` کی وضاحت کریں جو `f'{amount} {currency}'` لوٹاتا ہے۔ `s = Money(42, 'EUR')` بنائیں اور `str(s)` کا اندازہ کریں۔
اشارہ دکھائیں۔
__str__ میں f-string۔
3 کوششوں کے بعد حل دستیاب ہے۔
ورزش کا جائزہ لیں۔
(a، b) کے ساختی موازنہ کی بنیاد پر __init__(self, a, b) اور __eq__ کے ساتھ `Pair` کی وضاحت کریں۔ `Pair(1, 2) == جوڑا(1, 2)` کا اندازہ کریں۔
اشارہ دکھائیں۔
ٹیپلز کا موازنہ کریں (self.a, self.b) == (other.a, other.b)۔
3 کوششوں کے بعد حل دستیاب ہے۔
اضافی چیلنج
ایک کلاس کی وضاحت کریں \`Book\` جس میں کنسٹرکٹر \`title\` اور \`author\` لے رہا ہو۔ مخصوص طریقہ کی وضاحت کریں \`__str__(self)\` تو یہ سٹرنگ واپس کرتا ہے \`"Title by Author"\` (جیسے \`'1984 by George Orwell'\`)۔ ایک کتاب کو فوری بنائیں اور \`str(کتاب)\` کا جائزہ لیں۔
اشارہ دکھائیں۔
def __str__(self): کے اندر f"{self.title} by {self.author}" استعمال کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔