هن ليڪچر ۾، اسان پيٿون ۾ طبقن، تعمير ڪندڙن ۽ وراثت بابت ڄاڻنداسين.
اهي تصور هڪ وڏي پروگرام ۾ واقعي اهم آهن جتي مختلف قسمن جي وضاحت ڪرڻ جي ضرورت آهي.
ڪلاس
ڪلاس پروگرامنگ ۾ ضروري آهن ۽ اهي python لاءِ مخصوص نه آهن. ٻيا ڪيترائي پروگرامنگ ٻوليون طبقن جي تصور جي حمايت. اسان نئين ڊيٽا جي قسمن کي بيان ڪرڻ لاء ڪلاس استعمال ڪندا آهيون.
هينئر تائين، اسان پٿون ۾ بنيادي ڊيٽا جي قسمن جي باري ۾ سکيو آهي جهڙوڪ نمبر، اسٽرنگ، ۽ بوليان. اهي آهن بنيادي يا سادي ڊيٽا جا قسم Python ۾. اسان ڪجهه پيچيده ڊيٽا جا قسم پڻ ڏٺا آهن جهڙوڪ فهرستون ۽ لغات.
جڏهن ته اهي قسمون انتهائي مفيد آهن، اهي هميشه پيچيده تصورن کي ماڊل ڪرڻ لاء استعمال نٿا ڪري سگهن. مثال طور، هڪ نقطي جي خيال جي باري ۾ سوچيو، يا هڪ شاپنگ ڪارٽ. هڪ شاپنگ ڪارٽ هڪ boolean يا هڪ فهرست نه آهي. اهو هڪ مختلف قسم جي ڊيٽا آهي. تنهن ڪري اسان ڪلاس استعمال ڪري سگهون ٿا نئين قسم جي وضاحت ڪرڻ لاءِ حقيقي تصورن کي ماڊل ڪرڻ لاءِ.
هاڻي اچو ته هڪ نئين ڊيٽا جي قسم جي وضاحت ڪريون جنهن کي پوائنٽ سڏيو ويندو آهي. هي نئين قسم جا طريقا آهن جيئن اسان اڳ ۾ چڪاس ڪيو.
هي آهي توهان اهو ڪيئن ڪندا:
اسان "ڪلاس" لفظ استعمال ڪندي ڪلاس جي وضاحت ڪندي شروع ڪريون ٿا ۽ ان کان پوءِ اسان پنھنجي ڪلاس کي نالو ڏيون ٿا.
class Point
ھاڻي ڏسو، نالو رکڻ جي ڪنوينشن کي، جيڪو مون ھتي استعمال ڪيو آھي. مون ھتي پھريون اکر وڏو ڪيو آھي، اھو اھو آھي جنھن کي اسين pascal nameing Convention سڏين ٿا. هي ڪنوينشن ان کان مختلف آهي جيڪو اسان استعمال ڪندا آهيون اسان جي متغيرن ۽ افعالن کي نالا ڏيڻ لاءِ جنهن لاءِ اسان هميشه ننڍا اکر استعمال ڪندا آهيون ۽ انڊر اسڪور استعمال ڪندي ڪيترن ئي لفظن کي الڳ ڪندا آهيون. پر جڏهن ڪلاسن جو نالو ڏيون ٿا، اسان ان جي بدران ڪيترن ئي لفظن کي الڳ ڪرڻ لاءِ انڊر اسڪور استعمال نٿا ڪريون، اسان هر لفظ جي پهرين اکر کي سرمائيدار بڻايون ٿا.
اسان جي ڪلاس جي وضاحت ڪرڻ کان پوء، هڪ ڪالون استعمال ڪيو ويندو آهي جنهن جو مطلب آهي ته هاڻي هڪ بلاڪ جي وضاحت ڪئي وئي آهي.
class Point:
def move (self):
هن بلاڪ ۾، اسان سڀني ڪمن يا طريقن جي وضاحت ڪري سگھون ٿا جيڪي پوائنٽن سان تعلق رکن ٿيون. مثال طور، اسان هڪ فنڪشن جي وضاحت ڪري سگهون ٿا جنهن کي "حرڪ" سڏيو ويندو آهي هڪ نقطي کي منتقل ڪرڻ لاء. نوٽ ڪريو ته جيئن ئي اسان ٽائيپ ڪريو کليل قوس، PyCharm خود بخود هتي "خود" شامل ڪري ٿو. هي هڪ خاص لفظ آهي ۽ مون کي جلد ئي هن ڏانهن واپس وڃڻ ڏيو. اچو ته پرنٽ ڪريون "منتقل" ٽرمينل تي.
print("move")
اچو ته ٻيو طريقو بيان ڪريون جيئن ”ڊراو“ ۽ ان کي ٽرمينل تي پرنٽ ڪريون.
def draw(self):
print("draw")
اسان پنهنجي "پوائنٽ" طبقي جي تعريف سان ڪيو آهي. هن نئين قسم سان، اسان نيون شيون ٺاهي سگهون ٿا. ھڪڙو طبقو صرف بليو پرنٽ يا ٽيمپليٽ کي ٺاھڻ لاءِ شيون ٺاھي ٿو جيڪي اصل مثال آھن ان بليو پرنٽ جي بنياد تي. ڪا شئي ٺاهڻ لاءِ، اسان پنهنجي ڪلاس جو نالو ٽائيپ ڪريون ٿا ۽ پوءِ ان کي صرف هڪ فنڪشن وانگر سڏين ٿا. هي هڪ نئون اعتراض ٺاهي ٿو ۽ پوء ان کي واپس ڪري ٿو. پوءِ اسان ان شئي کي متغير ۾ محفوظ ڪري سگھون ٿا. اچو ته مان توهان کي ڏيکاريان:
هتي اسان هڪ "پوائنٽ 1" جي وضاحت ڪئي آهي، جيڪو هڪ ٽي-dimensional نقطو آهي. توھان ڏسي سگھو ٿا ته، اسان ٽرمينل تي انفرادي ڪوآرڊينيٽ پرنٽ ڪري سگھون ٿا.
اسان هن نقطي سان ٻه طريقا استعمال ڪري سگهون ٿا "ڊرا" ۽ "هل".
تنهن ڪري ٻيهر ورجائڻ لاءِ، اسان ڪلاس استعمال ڪندا آهيون نون قسمن جي وضاحت ڪرڻ لاءِ ۽ انهن قسمن جا طريقا ٿي سگهن ٿا جيڪي اسان طبقي جي جسم ۾ بيان ڪيون ٿا. ڪلاس ۾ خاصيتون هجن ٿيون جيڪي اسان پنهنجي پروگرامن ۾ ڪٿي به سيٽ ڪري سگهون ٿا.
ٺاھيندڙ
هينئر تائين، اسان سکيو آهي ته ڪلاس استعمال ڪري نوان قسم ڪيئن ٺاهجن. ھاڻي ھن عمل ۾ ھڪڙو ننڍڙو مسئلو آھي. اسان ڪلاس استعمال ڪندي x يا y ڪوآرڊينيٽ کان سواءِ پوائنٽ اعتراض ٺاهي سگهون ٿا ۽ اهو مثالي ناهي. مون کي ڏيکاريو.
اچو ته ھڪ پوائنٽ ٺاھيون ۽ ان کي پرنٽ ڪريون ان کان اڳ جو اسان x ڪوآرڊينيٽ قائم ڪريون. اسان جي پروگرام کي هلائڻ جي نتيجي ۾ هڪ خاصيت جي غلطي ۾ هن طرح:
ان جو مطلب اهو آهي ته نقطي اعتراض کي x سڏيو ويندو آهي. ھاڻي مسئلو اھو آھي ته x يا y ڪوآرڊينيٽس کان سواءِ پوائنٽ شئي حاصل ڪرڻ ممڪن آھي. اهو ڪو به مطلب نٿو رکي جيئن جڏهن به اسان ڪنهن نقطي جي باري ۾ ڳالهايون ٿا، اسان کي ڄاڻڻ جي ضرورت آهي ته اهو نقطو ڪٿي واقع آهي. هن مسئلي کي حل ڪرڻ لاء، اسان هڪ تعمير ڪندڙ استعمال ڪندا آهيون. ڪنسٽرڪٽر هڪ فنڪشن آهي جيڪو ڪنهن شئي ٺاهڻ وقت سڏجي ٿو.
هتي اهو آهي ته اسان هڪ تعمير ڪندڙ ڪيئن استعمال ڪندا آهيون. پهرين، اچو ته مٿي ڏنل پروگرام ۾ x ۽ y همراهڪن جي قدرن کي پاس ڪريون.
point = Point(10, 20)
print(point.x)
هاڻي، اسان کي هن طبقي ۾ هڪ خاص طريقو شامل ڪرڻ جي ضرورت آهي جنهن کي تعمير ڪندڙ سڏيو ويندو آهي. ان جي نحو هن طرح آهي:
def __init__(self, x, y):
init
شروعاتي لاءِ مختصر آهي، ۽ هي اهو فنڪشن يا طريقو آهي جنهن کي سڏيو ويندو آهي جڏهن ڪو نئون نقطو اعتراض ٺاهيو ويندو آهي. x ۽ y صحيح بعد شامل ڪيا ويا آهن self
ٻه اضافي پيٽرولر شامل ڪرڻ لاء.
ان کان پوء، اسان کي x ۽ y کي پاس ڪيل ويلز يعني 10 ۽ 20 ڏانهن نقشو ڪرڻ گهرجي
self.x = x
self.y = y
اسان استعمال ڪريون ٿا self
موجوده شئي ڏانهن اشارو ڪرڻ لاءِ ۽ پوءِ اسان x جي خاصيت کي ترتيب ڏيون ٿا x دليل کي پاس ڪيو ويو فنڪشن “x” ڏانهن. هن طريقي سان، استعمال ڪندي init
طريقو، اسان اسان جي شين جي شروعات ڪري سگھون ٿا. اهو طريقو هڪ تعمير ڪندڙ طور حوالو ڏنو ويو آهي. اچو ته اسان جو پروگرام هلون.
هاڻي، اسان بعد ۾ x ۽ y همراهن کي تبديل ڪري سگهون ٿا. اچو ته x coordinate کي اپڊيٽ ڪريون:
point = Point(10, 20)
point.x = 11
print(point.x)
ھاڻي، x coordinate کي اپڊيٽ ڪيو ويو آھي قدر 11.
ج
هتي توهان لاء هڪ دلچسپ مشق آهي.
مان چاهيان ٿو ته توهان هڪ نئين قسم جي تعريف ڪريو جنهن کي ماڻهو سڏيو ويندو آهي. اهي "شخص" شيون هجڻ گهرجن "name
”صفت سان گڏو گڏ“talk()
"طريقو.
اهو هڪ سادي ڪم آهي ۽ ڪجهه منٽن کان وڌيڪ نه وٺڻ گهرجي.
حل
ڪلاس "شخص" کي هن طرح بيان ڪرڻ سان شروع ڪريو:
class Person:
self.name = name
اسان بعد ۾ تعمير ڪندڙ جي وضاحت ڪنداسين. هاڻي، اسان ٺاهي سگهون ٿا "شخص" اعتراض. اچو ته ان کي جان سڏين
john = Person("John Smith")
print(john.name)
john.talk()
ھاڻي، ڪوڊ جي پھرئين حصي ڏانھن وڃو ۽ ٺاھيندڙ ٺاھيو.
def __init__(self, name):
آخري ڪوڊ هن طرح نظر ايندو:
توھان پڻ استعمال ڪري سگھو ٿا فارميٽ ٿيل اسٽرنگ ۽ ٻين تصورن کي ڪلاس ۽ ٺاھيندڙن سان گڏ.
ث
وراثت هڪ ٻيو تصور آهي جيڪو طبقن سان لاڳاپيل آهي جيڪو توهان کي ڪوڊ ٻيهر استعمال ڪرڻ جي اجازت ڏئي ٿو.
هن ڪوڊ جو ٽڪرو غور ڪريو.
class Dog:
def walk(self):
print("walk")
اسان هڪ ڪلاس ”ڪتا“ ٺاهيا آهن ”هلڻ“ واري طريقي سان. هن طريقي ۾، اسان صرف ٽرمينل تي هلڻ واري پيغام کي ڇپائي رهيا آهيون. اچو ته چئو، هڪ حقيقي پروگرام ۾، هتي صرف هڪ لائين بدران ڪوڊ جون 10 لائينون آهن. مستقبل ۾، جيڪڏهن ڪنهن ٻئي ڪلاس جي ضرورت آهي ته ”هلڻ“ جو طريقو، اسان کي اهو سڀ ڪوڊ ورجائڻو پوندو. هي مثالي نه آهي.
پروگرامنگ ۾، اسان وٽ هڪ اصول آهي جنهن کي DRY سڏيو ويندو آهي جيڪو مختصر آهي پاڻ کي ٻيهر نه ڏيو. اچو ته مستقبل ۾ ڪنهن زماني ۾، اسان کي اسان جي "هلڻ" جي طريقي سان هڪ مسئلو دريافت ڪيو ۽ جيڪڏهن اسان هن طريقي کي ٻين ڪيترن ئي هنڌن تي ورجايو يا نقل ڪيو آهي، اسان کي واپس اچڻو پوندو ۽ ان مسئلي کي حل ڪرڻو پوندو هر جڳهه تي جيڪو اسان نقل ڪيو آهي. ڪوڊ. تنهن ڪري پروگرامنگ ۾ اسان کي ٻه ڀيرا ڪجهه وضاحت نه ڪرڻ گهرجي.
ھن مسئلي کي حل ڪرڻ لاءِ مختلف طريقا آھن پر ھتي اسين اھو سکڻ وارا آھيون جيڪو شروعات ڪندڙن لاءِ آسان آھي ۽ ان کي وراثت چئبو آھي. ان صورت ۾، اسان هڪ ٻيو طبقو ٺاهينداسين "ممالڪ" ۽ ان طبقي ۾ اسان جي "هلڻ" وصف جي وضاحت ڪنداسين.
class Mammal:
def walk(self):
print("walk")
اسان جي "Mammal" طبقي جي وضاحت ڪرڻ کان پوء، اسين وراثت کي استعمال ڪري سگھون ٿا خاصيتون پاس ڪرڻ لاء:
ٻئي ڪتا ۽ ٻلي طبقن کي ورثي ۾ ملي رهيا آهن سڀني طبقن جي طريقن کي انهن جي والدين طبقي ۾ بيان ڪيو ويو آهي. هاڻي، اسان ڪتن لاء مخصوص طريقا شامل ڪري سگهون ٿا جهڙوڪ:
class Dog:
def bark(self):
print("bark")
ويڙهيو!
اهو سڀ ڪجهه طبقن، تعمير ڪندڙن ۽ وراثت جي تصورن سان ڪلاسن ۾ ڪوڊ کي ٻيهر استعمال ڪرڻ بابت هو. هاڻي اسان جو سلسلو ختم ٿيڻ جي ويجهو آهي. هن نقطي تائين، توهان کي قابل هجڻ گهرجي پٿون ۾ سٺو، پڙهڻ لائق ۽ جامع ڪوڊ.
اسان ايندڙ ليڪچر ۾ ماڊلز ۽ پيڪيجز جو تصور ڏسنداسين.
جواب ڇڏي وڃو