মডিউল পাঠ (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রিটার্নিং NotImplemented (একটি বিশেষ কীওয়ার্ড, নয় 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__→ একটি dict কী / সেট উপাদান হতে হবে
তোমার পালা
__init__(self, amount, currency) এবং __str__ দিয়ে `Money` সংজ্ঞায়িত করুন যা `f'{amount} {মুদ্রা}'` প্রদান করে। `s = Money(42, 'EUR')` তৈরি করুন এবং `str(s)` মূল্যায়ন করুন।
ইঙ্গিত দেখান
__str__ এ f-স্ট্রিং।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
ব্যায়াম পর্যালোচনা করুন
(a, b) এর কাঠামোগত তুলনার উপর ভিত্তি করে __init__(self, a, b) এবং __eq__ এর সাথে `জোড়া` সংজ্ঞায়িত করুন। `জোড়া(1, 2) == জোড়া(1, 2)` মূল্যায়ন করুন।
ইঙ্গিত দেখান
টিপল তুলনা করুন (self.a, self.b) == (other.a, other.b)।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
অতিরিক্ত চ্যালেঞ্জ
একজন কন্সট্রাকটর দিয়ে \`শিরোনাম\` এবং \`লেখক\` নিয়ে একটি ক্লাস \`বই\` সংজ্ঞায়িত করুন। বিশেষ পদ্ধতি সংজ্ঞায়িত করুন \`__str__(self)\` যাতে এটি স্ট্রিংটি ফেরত দেয় \`"লেখকের শিরোনাম"\` (যেমন \`'1984 দ্বারা জর্জ অরওয়েল'\`)। একটি বই তাত্ক্ষণিক করুন এবং \`str(বই)\` মূল্যায়ন করুন।
ইঙ্গিত দেখান
def __str__(self): এর ভিতরে f"{self.title} by {self.author}" ব্যবহার করুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ