پٿون پروگرامنگ جي وسيع دنيا ۾، خاصيتن جو هڪ مجموعو آهي، جيڪي اڪثر ڪري شروعات ڪندڙن کان اڻڄاتل آهن، تڏهن به ٻولي جي ماحولياتي نظام ۾ اهم اهميت رکن ٿا.
جادو جا طريقا اڳئين طريقن جو هڪ سيٽ آهنdefiPython ۾ nited جيڪي خاص نحوي ڪارڪردگي مهيا ڪن ٿا. اهي آساني سان انهن جي ڊبل ڊيش جي شروعات ۽ آخر ۾ سڃاتل آهن، جهڙوڪ __init__, __call__, __len__
… وغيره
جادو جا طريقا اجازت ڏين ٿا ته ڪسٽم شين کي بلٽ ان پٿون جي قسمن سان ملندڙ ڪم ڪرڻ جي.
هن آرٽيڪل ۾، اسان طاقتور ڊنڊر جي ڪم تي ڌيان ڏينداسين. اسان انهن جي مقصد جي ڳولا ڪنداسين ۽ انهن جي استعمال تي بحث ڪنداسين.
ڇا توهان هڪ Python نوان آهيو يا هڪ تجربيڪار پروگرامر، هن آرٽيڪل جو مقصد توهان کي ڊنڊر جي ڪمن جي هڪ جامع ڄاڻ مهيا ڪرڻ آهي، توهان جي پٿون ڪوڊنگ جي تجربي کي وڌيڪ ڪارائتو ۽ لطف اندوز بڻائيندي.
ياد رکو، پٿون جو جادو نه رڳو ان جي سادگي ۽ استحڪام ۾ آهي، پر ان جي طاقتور خاصيتن جهڙوڪ ڊنڊر افعال ۾ پڻ آهي.
شايد سڀ کان وڌيڪ بنيادي ڊنڊر فنڪشن. هي جادوئي طريقو آهي جنهن کي پٿون پاڻمرادو ڪال ڪري ٿو جڏهن به اسان نئين شئي ٺاهي (يا جيئن نالو تجويز ڪيو، شروعات ڪريو)__init__
ڪلاس پيزا:
def __init__ (پاڻ، سائيز، ٽوپنگ):
self.size = ماپ
self.toppings = toppings
# ھاڻي اچو ھڪڙو پيزا ٺاھيو
my_pizza = پيزا ('وڏو'، ['پيپروني'، 'مشروم'])
print(my_pizza.size) # ھي پرنٽ ڪندو: وڏو
print(my_pizza.toppings) # هي پرنٽ ڪندو: ['pepperoni', 'mushrooms']
هن مثال ۾، پيزا نالي هڪ ڪلاس ٺاهي وئي آهي. اسان پنھنجي __init__ فنڪشن کي مقرر ڪيو آھي شامل ڪرڻ لاءِ پيٽرولر شامل ڪرڻ لاءِ شروعاتي وقت تي بيان ڪيو وڃي، ۽ انھن کي اسان جي ڪسٽم اعتراض جي ملڪيت طور مقرر ڪيو.
هتي، اهو ڪلاس جي مثال جي نمائندگي ڪرڻ لاء استعمال ڪيو ويندو آهي. تنهن ڪري جڏهن اسان لکندا آهيون self.size = سائيز، اسان چوندا آهيون، "اي، هي پيزا اعتراض هڪ خاصيت جي سائيز آهي size
، ۽ مان چاهيان ٿو ته اها هر سائيز هجي جيڪا مون مهيا ڪئي هئي جڏهن مون اعتراض ٺاهيو“.
هي پائٿون جو جادو طريقو آهي جيڪو اسان کي اجازت ڏئي ٿو defiاسان جي حسب ضرورت شيء لاء هڪ وضاحت nite.
جڏهن توهان ڪنهن شئي کي پرنٽ ڪريو يا ان کي استعمال ڪندي اسٽرنگ ۾ تبديل ڪريو str()
، پٿون چيڪ ڪريو جيڪڏھن توھان وٽ آھي defiهڪ طريقو اختيار ڪيو __str__
انهي اعتراض جي طبقي لاء.
جيڪڏهن ائين آهي، اهو طريقو استعمال ڪريو اعتراض کي اسٽرنگ ۾ تبديل ڪرڻ لاء.
اسان پنھنجي پيزا مثال کي وڌائي سگھون ٿا ھڪڙي فنڪشن کي شامل ڪرڻ لاء __str__
جيئن ته:
ڪلاس پيزا: def __init__(self, size, toppings): self.size = size self.toppings = toppings def __str__(self): واپس f"A {self.size} پيزا سان {','.join(self.toppings) )}" my_pizza = پيزا('وڏي'، ['پيپروني'، 'مشروم']) پرنٽ(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__
توهان کي وڌيڪ انساني وضاحت ڏئي ٿو. مون کي اميد آهي ته اهو توهان جي مدد ڪري ٿو انهن ڊنڊر طريقن کي ٿورو بهتر.
Python ۾، اسان سڀ ڄاڻون ٿا ته اهو ممڪن آهي نمبر شامل ڪرڻ آپريٽر استعمال ڪندي +
وانگر 3 + 5
.
پر ڇا جيڪڏهن اسان ڪجهه ڪسٽم اعتراض جا مثال شامل ڪرڻ چاهيون ٿا؟
ڊنر فنڪشن __add__
اهو اسان کي صرف اهو ڪرڻ جي اجازت ڏئي ٿو. اهو اسان کي موقعو ڏئي ٿو defiآپريٽر جي رويي کي بهتر ڪريو +
اسان جي ذاتي شين تي.
مستقل مزاجي جي مفاد ۾، اچو ته فرض ڪريون ته اسان چاهيون ٿا definit جو رويي +
اسان جي پيزا مثال تي. اچو ته چئو ته جڏهن اسان ٻه يا وڌيڪ پيزا گڏ ڪندا آهيون، اهو خودڪار طريقي سان انهن جي سڀني ٽوپنگ کي گڏ ڪندو. ھتي اھو آھي جيڪو اھو نظر اچي سگھي ٿو:
ڪلاس پيزا:
def __init__ (پاڻ، سائيز، ٽوپنگ):
self.size = ماپ
self.toppings = toppings
def __add__ (پاڻ، ٻيا):
جيڪڏهن نه مثال (ٻيو، پيزا):
بلند ڪريو ٽائپ ايرر ("توهان صرف هڪ ٻيو پيزا شامل ڪري سگهو ٿا!")
new_toppings = self.toppings + other.toppings
واپسي پيزا (self.size، new_toppings)
# اچو ته ٻه پيزا ٺاهيون
pizza1 = پيزا ('وڏو'، ['پيپروني'، 'مشروم'])
pizza2 = پيزا ('وڏو'، ['زيتون'، 'انناس'])
# ۽ ھاڻي اچو ته "شامل ڪريو" انھن کي
combined_pizza = pizza1 + pizza2
print(combined_pizza.toppings) # هي پرنٽ ڪندو: ['pepperoni', 'mushrooms', 'olives', 'pineapple']
ساڳيءَ طرح ڊنر __add__
، اسان پڻ ڪري سگهون ٿا definite ٻيا رياضياتي افعال جهڙوڪ __sub__
(آپريٽر کي استعمال ڪندي گھٽائڻ سان -
) اي __mul__
(آپريٽر استعمال ڪندي ضرب ڪرڻ لاءِ *
).
هي ڊنر جو طريقو اسان کي اجازت ڏئي ٿو definish ڪهڙو ڪم آهي len()
اسان جي ڪسٽمائيز شين لاء واپس ڪرڻ گهرجي.
Python استعمال ڪري ٿو 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__
، هن لاء استعمال ڪيو ويندو آهي defiرويي کي ختم ڪريو جيڪو ايندڙ قيمت کي ٻيهر ڪرڻ ۾ واپس ڪرڻ گهرجي. ان کان علاوه، اهو پڻ اشارو ڏيڻ گهرجي ته ان واقعي تي ٻيهر قابل ذڪر آهي ته تسلسل ۾ وڌيڪ عناصر نه آهن. اسان عام طور تي هي حاصل ڪريون ٿا هڪ استثنا بلند ڪندي StopIteration
.
اسان جي پيزا مثال لاءِ، اچو ته چئو ته اسان ٽوپين کي ٻيهر ڏيڻ چاهيون ٿا. اسان پنهنجي پيزا ڪلاس کي ٻيهر قابل بڻائي سگهون ٿا defiطريقو ڏيڻ __iter__
:
ڪلاس پيزا:
def __init__ (پاڻ، سائيز، ٽوپنگ):
self.size = ماپ
self.toppings = toppings
def __iter__ (پاڻ):
self.n = 0
پاڻ کي واپس ڪرڻ
def __اڳيون__(پاڻ):
جيڪڏھن self.n <len(self.toppings):
نتيجو = خود ٽاپنگ[self.n]
self.n += 1
واپسي جو نتيجو
ٻيو:
StopIteration وڌايو
# اچو ته هڪ پيزا ٺاهيو
my_pizza = پيزا ('وڏو'، ['پيپروني'، 'مشروم'، 'زيتون'])
# ۽ هاڻي اچو ته ان تي ٻيهر ورجائي
my_pizza ۾ ٽاپ ڪرڻ لاءِ:
ڇپائي (ٽاپنگ)
انهي حالت ۾، لوپ ڪال لاء __iter__
، جيڪو هڪ انسداد شروع ڪري ٿو (self.n)
۽ پيزا اعتراض پاڻ کي واپس ڪري ٿو (self)
.
پوء، لوپ ڪالن لاء __next__
هر ٽاپنگ کي موڙ ۾ حاصل ڪرڻ لاء.
جڏهن __next__
سڀ مصالحو واپس ڪيو، StopIteration
اهو هڪ استثنا اڇلائي ٿو ۽ لوپ لاءِ هاڻي ڄاڻي ٿو ته هتي وڌيڪ ٽاپنگ نه آهن ۽ انهي ڪري ٻيهر عمل کي ختم ڪري ڇڏيندو.
Ercole Palmeri
ڪيٽينيا پولي ڪلينڪ ۾ ايپل ويزن پرو ڪمرشل ناظر استعمال ڪندي هڪ چشمي جو آپريشن ڪيو ويو…
رنگ سازي ذريعي سٺي موٽر صلاحيتن کي ترقي ڪرڻ ٻارن کي وڌيڪ پيچيده صلاحيتن لاء تيار ڪري ٿو جهڙوڪ لکڻ. رنگ ڏيڻ…
بحري شعبي هڪ حقيقي عالمي معاشي طاقت آهي، جيڪا 150 بلين مارڪيٽ جي طرف نيويگيٽ ڪئي آهي ...
گذريل سومر، فنانشل ٽائمز OpenAI سان هڪ ڊيل جو اعلان ڪيو. ايف ٽي پنهنجي عالمي سطح جي صحافت کي لائسنس ڏئي ٿو ...