পাইথন প্রোগ্রামিংয়ের বিশাল বিশ্বে, এমন একগুচ্ছ বৈশিষ্ট্য রয়েছে যা প্রায়শই নতুনদের নজরে পড়ে না, তবুও ভাষার ইকোসিস্টেমে উল্লেখযোগ্য গুরুত্ব রয়েছে।
ম্যাজিক পদ্ধতি হল পূর্ব পদ্ধতির একটি সেটdefiপাইথনে নাইটিস যা বিশেষ সিনট্যাকটিক বৈশিষ্ট্য প্রদান করে। তারা সহজে শুরু এবং শেষে তাদের ডবল ড্যাশ দ্বারা স্বীকৃত হয়, মত __init__, __call__, __len__
… ইত্যাদি
ম্যাজিক পদ্ধতিগুলি কাস্টম অবজেক্টকে বিল্ট-ইন পাইথন প্রকারের মতো আচরণ করার অনুমতি দেয়।
এই নিবন্ধে, আমরা শক্তিশালী ডান্ডার ফাংশনগুলিতে ফোকাস করব। আমরা তাদের উদ্দেশ্য অন্বেষণ করব এবং তাদের ব্যবহার নিয়ে আলোচনা করব।
আপনি পাইথন নবাগত বা একজন অভিজ্ঞ প্রোগ্রামার হোন না কেন, এই নিবন্ধটির লক্ষ্য আপনাকে ডান্ডার ফাংশনগুলির একটি বিস্তৃত বোধগম্যতা প্রদান করা, আপনার পাইথন কোডিং অভিজ্ঞতাকে আরও দক্ষ এবং আনন্দদায়ক করে তুলবে।
মনে রাখবেন, পাইথনের জাদু শুধুমাত্র এর সরলতা এবং বহুমুখিতাই নয়, ডান্ডার ফাংশনের মতো শক্তিশালী বৈশিষ্ট্যগুলির মধ্যেও রয়েছে।
সম্ভবত সব থেকে মৌলিক ডন্ডার ফাংশন. এটি এমন একটি ম্যাজিক পদ্ধতি যা পাইথন স্বয়ংক্রিয়ভাবে কল করে যখনই আমরা একটি নতুন অবজেক্ট তৈরি করি (অথবা নাম অনুসারে শুরু হয়)।__init__
ক্লাস পিজা:
def __init__(স্ব, আকার, টপিংস):
self.size = আকার
self.toppings = toppings
# এবার একটা পিজ্জা তৈরি করি
my_pizza = পিজ্জা('বড়', ['পেপারোনি', 'মাশরুম'])
print(my_pizza.size) # এটি প্রিন্ট করবে: বড়
print(my_pizza.toppings) # এটি প্রিন্ট করবে: ['pepperoni', 'mashrooms']
এই উদাহরণে, পিজা নামে একটি ক্লাস তৈরি করা হয়েছে। আমরা আমাদের __init__ ফাংশন সেট আপ করি শুরু করার সময় নির্দিষ্ট করার পরামিতিগুলি অন্তর্ভুক্ত করার জন্য এবং সেগুলিকে আমাদের কাস্টম অবজেক্টের বৈশিষ্ট্য হিসাবে সেট করি।
এখানে, এটি ক্লাসের উদাহরণ উপস্থাপন করতে ব্যবহৃত হয়। তাই যখন আমরা self.size = size লিখি, তখন আমরা বলি, "আরে, এই পিৎজা বস্তুটির একটি বৈশিষ্ট্যের আকার আছে size
, এবং আমি বস্তুটি তৈরি করার সময় আমি যে আকার দিয়েছি তা হতে চাই”।
এটি পাইথনের জাদু পদ্ধতি যা আমাদের করতে দেয় defiআমাদের কাস্টম আইটেম জন্য একটি বিবরণ নিশ.
আপনি যখন একটি বস্তু মুদ্রণ বা ব্যবহার করে একটি স্ট্রিং রূপান্তরিত str()
, পাইথন আছে কিনা চেক করুন defiআমি একটি পদ্ধতি নিয়ে এসেছি __str__
যে বস্তুর ক্লাস জন্য.
যদি তাই হয়, বস্তুটিকে একটি স্ট্রিং এ রূপান্তর করতে সেই পদ্ধতিটি ব্যবহার করুন।
আমরা একটি ফাংশন অন্তর্ভুক্ত করার জন্য আমাদের পিজা উদাহরণ প্রসারিত করতে পারি __str__
নিম্নরূপ:
ক্লাস পিজা: def __init__(self, size, toppings): self.size = size self.toppings = toppings def __str__(self): {', '.join(self.toppings) সহ f"A {self.size} পিজা ফেরত দিন )}" my_pizza = Pizza('large', ['pepperoni', 'mashrooms']) print(my_pizza) # এটি প্রিন্ট করবে: পেপারোনি, মাশরুম সহ একটি বড় পিজ্জা
__repr__
__str__ ফাংশনটি একটি বস্তুর বৈশিষ্ট্য বর্ণনা করার একটি অনানুষ্ঠানিক উপায়। অন্যদিকে, __repr__ কাস্টম অবজেক্টের আরও আনুষ্ঠানিক, বিস্তারিত এবং দ্ব্যর্থহীন বর্ণনা প্রদান করতে ব্যবহৃত হয়।
ডাকলে repr()
একটি অবজেক্টে বা আপনি কনসোলে অবজেক্টের নাম টাইপ করুন, পাইথন একটি পদ্ধতি সন্ধান করবে __repr__
.
Se __str__
এইটা না definite, Python ব্যবহার করবে __repr__
একটি ব্যাকআপ হিসাবে যখন বস্তু মুদ্রণ বা একটি স্ট্রিং রূপান্তর করার চেষ্টা করে। তাই এটা প্রায়ই একটি ভাল ধারণা defiঅন্তত শেষ __repr__
, এমনকি যদি আপনি না করেন defiবাইরে আসো __str__
.
এখানে আমরা কিভাবে পারে defiশেষ __repr__
আমাদের পিজ্জা উদাহরণের জন্য:
ক্লাস পিজা:
def __init__(স্ব, আকার, টপিংস):
self.size = আকার
self.toppings = toppings
def __repr__(স্বয়ং):
ফেরত দিন f"Pizza('{self.size}', {self.toppings})"
my_pizza = পিজ্জা('বড়', ['পেপারোনি', 'মাশরুম'])
print(repr(my_pizza)) # এটি প্রিন্ট করবে: পিৎজা('বড়', ['পেপারোনি', 'মাশরুম'])
__repr__
আপনাকে একটি স্ট্রিং দেয় যা আপনি পিৎজা অবজেক্ট পুনরায় তৈরি করতে পাইথন কমান্ড হিসাবে চালাতে পারেন __str__
আপনাকে আরও মানবিক বর্ণনা দেয়। আমি আশা করি এটি আপনাকে এই ডান্ডার পদ্ধতিগুলিকে একটু ভাল চিবিয়ে সাহায্য করবে!
পাইথনে, আমরা সবাই জানি যে অপারেটর ব্যবহার করে সংখ্যা যোগ করা সম্ভব +
, আসো 3 + 5
.
কিন্তু যদি আমরা কিছু কাস্টম বস্তুর উদাহরণ যোগ করতে চাই?
ডান্ডার ফাংশন __add__
এটা আমাদের শুধু যে করতে অনুমতি দেয়. এটা আমাদের ক্ষমতা দেয় defiঅপারেটরের আচরণ নিশ +
আমাদের ব্যক্তিগতকৃত আইটেমগুলিতে।
ধারাবাহিকতার স্বার্থে, ধরা যাক আমরা চাই defiএর আচরণ শেষ করুন +
আমাদের পিজা উদাহরণে। ধরা যাক যে যখনই আমরা দুই বা ততোধিক পিজ্জা একসাথে যোগ করি, এটি স্বয়ংক্রিয়ভাবে তাদের সমস্ত টপিং একত্রিত করবে। এটি দেখতে কেমন হতে পারে তা এখানে:
ক্লাস পিজা:
def __init__(স্ব, আকার, টপিংস):
self.size = আকার
self.toppings = toppings
def __add__(স্বয়ং, অন্যান্য):
ইন্সট্যান্স না হলে (অন্যান্য, পিৎজা):
TypeError বাড়াতে ("আপনি শুধুমাত্র অন্য পিজা যোগ করতে পারেন!")
new_toppings = self.toppings + other.toppings
রিটার্ন পিজা (self.size, new_toppings)
# আসুন দুটি পিজা তৈরি করি
pizza1 = পিজ্জা ('বড়', ['পেপারোনি', 'মাশরুম'])
pizza2 = Pizza('বড়', ['অলিভ', 'আনারস'])
# এবং এখন তাদের "যোগ" করা যাক
combined_pizza = pizza1 + pizza2
print(combined_pizza.toppings) # এটি প্রিন্ট করবে: ['পেপারোনি', 'মাশরুম', 'অলিভ', 'আনারস']
একইভাবে ডান্ডার __add__
, আমরাও পারি defiঅন্যান্য গাণিতিক ফাংশন যেমন শেষ করুন __sub__
(অপারেটর ব্যবহার করে বিয়োগ করে -
) ই __mul__
(অপারেটর ব্যবহার করে গুণের জন্য *
).
এই ডান্ডার পদ্ধতি আমাদের অনুমতি দেয় defiকি ফাংশন শেষ len()
আমাদের কাস্টমাইজড আইটেম জন্য ফিরে আসতে হবে.
পাইথন ব্যবহার করে len()
একটি তালিকা বা স্ট্রিং যেমন একটি ডেটা কাঠামোর দৈর্ঘ্য বা আকার পেতে।
আমাদের উদাহরণের পরিপ্রেক্ষিতে, আমরা বলতে পারি যে একটি পিজ্জার "দৈর্ঘ্য" হল এটিতে থাকা টপিংয়ের সংখ্যা। আমরা কীভাবে এটি বাস্তবায়ন করতে পারি তা এখানে:
ক্লাস পিজা:
def __init__(স্ব, আকার, টপিংস):
self.size = আকার
self.toppings = toppings
def __len__(স্বয়ং):
রিটার্ন লেন (self.toppings)
# আসুন একটি পিজা তৈরি করি
my_pizza = পিজ্জা ('বড়', ['পেপারোনি', 'মাশরুম', 'জলপাই'])
print(len(my_pizza)) # এটি প্রিন্ট করবে: 3
__len__ পদ্ধতিতে, আমরা শুধুমাত্র তালিকার দৈর্ঘ্য ফিরিয়ে দিই toppings
। এখন, len(my_pizza)
এটা কত টপিং আছে তা আমাদের বলে দেবে my_pizza
.
এই ডান্ডার পদ্ধতি অবজেক্টগুলিকে পুনরাবৃত্তিযোগ্য হতে দেয়, অর্থাৎ এটি লুপের জন্য ব্যবহার করা যেতে পারে।
এটি করতে, আমাদেরও করতে হবে defiফাংশন শেষ করুন __next__
, এই জন্য ব্যবহৃত হয় definish আচরণ যা পুনরাবৃত্তির পরবর্তী মান ফেরত দিতে হবে। এটি ইভেন্টে পুনরাবৃত্তিযোগ্য সংকেত দেওয়া উচিত যে ক্রমটিতে আর কোনও উপাদান নেই। আমরা সাধারণত একটি ব্যতিক্রম নিক্ষেপ করে এটি অর্জন করি StopIteration
.
আমাদের পিজ্জা উদাহরণের জন্য, ধরা যাক আমরা টপিংগুলি পুনরাবৃত্তি করতে চাই। আমরা আমাদের পিজা ক্লাস পুনরাবৃত্তিযোগ্য করতে পারে defiNendo একটি পদ্ধতি __iter__
:
ক্লাস পিজা:
def __init__(স্ব, আকার, টপিংস):
self.size = আকার
self.toppings = toppings
def __iter__(self):
self.n = 0
নিজেকে ফিরে
def __next__(self):
যদি self.n < len(self.toppings):
ফলাফল = self.toppings[self.n]
self.n += 1
ফেরত ফলাফল
অন্য:
StopIteration বাড়ান
# আসুন একটি পিজা তৈরি করি
my_pizza = পিজ্জা ('বড়', ['পেপারোনি', 'মাশরুম', 'জলপাই'])
# এবং এখন এর এটি উপর পুনরাবৃত্তি করা যাক
my_pizza এ টপ করার জন্য:
মুদ্রণ (টপিং)
এই ক্ষেত্রে, লুপ কল জন্য __iter__
, যা একটি কাউন্টার আরম্ভ করে (self.n)
এবং পিজ্জা বস্তুটি নিজেই ফেরত দেয় (self)
.
তারপর, লুপ কল জন্য __next__
পালাক্রমে প্রতিটি টপিং পেতে.
যখন __next__
সব মশলা ফিরে এসেছে, StopIteration
এটি একটি ব্যতিক্রম নিক্ষেপ করে এবং for loop এখন জানে যে এখানে আর কোন টপিং নেই এবং তাই পুনরাবৃত্তি প্রক্রিয়াটি বাতিল হবে।
Ercole Palmeri
অ্যাপল ভিশন প্রো কমার্শিয়াল ভিউয়ার ব্যবহার করে ক্যাটানিয়া পলিক্লিনিকে একটি চক্ষুরোগ অপারেশন করা হয়েছিল...
রঙের মাধ্যমে সূক্ষ্ম মোটর দক্ষতার বিকাশ শিশুদের লেখার মতো জটিল দক্ষতার জন্য প্রস্তুত করে। রঙ…
নৌ সেক্টর একটি সত্যিকারের বৈশ্বিক অর্থনৈতিক শক্তি, যা 150 বিলিয়ন বাজারের দিকে নেভিগেট করেছে...
গত সোমবার, ফাইন্যান্সিয়াল টাইমস ওপেনএআই-এর সাথে একটি চুক্তি ঘোষণা করেছে। FT তার বিশ্বমানের সাংবাদিকতার লাইসেন্স দেয়...