پدې لیکچر کې به موږ په پیتون کې د ټولګیو، جوړونکو او میراث په اړه زده کړه وکړو.
دا مفکورې واقعیا په لوی برنامه کې مهم دي چیرې چې مختلف ډولونه تعریف ته اړتیا لري.
ټولګي
ټولګي په برنامه کولو کې اړین دي او دا د python لپاره ځانګړي ندي. ډیری نور پروګرامونې ژبې د ټولګیو د مفکورې ملاتړ کوي. موږ د نوي ډیټا ډولونو تعریف کولو لپاره ټولګي کاروو.
تر دې دمه ، موږ په پایتون کې د لومړني ډیټا ډولونو په اړه زده کړل لکه شمیرې ، تارونه او بولین. دا په Python کې لومړني یا ساده ډیټا ډولونه دي. موږ یو څو پیچلي ډیټا ډولونه لکه لیستونه او لغتونه هم لیدلي دي.
پداسې حال کې چې دا ډولونه خورا ګټور دي، دوی تل د پیچلو مفکورو ماډل کولو لپاره نشي کارول کیدی. د مثال په توګه، د یوې نقطې نظر، یا د پیرودلو کارټ په اړه فکر وکړئ. د پیرودلو کارټ بولین یا لیست ندی. دا یو بل ډول ډیټا دی. نو موږ کولی شو د ریښتیني مفکورو ماډل کولو لپاره نوي ډولونه تعریفولو لپاره ټولګي وکاروو.
اوس راځئ چې د پوائنټ په نوم د نوي ډیټا ډول تعریف کړو. دا نوی ډول به میتودونه ولري لکه څنګه چې موږ دمخه چیک کړی.
تاسو به دا څنګه ترسره کړئ:
موږ د "ټولګي" کلیدي کلمې په کارولو سره د ټولګي تعریف کولو سره پیل کوو او له هغې وروسته موږ خپل ټولګي ته نوم ورکوو.
class Point
اوس، د نومولو کنوانسیون وګورئ چې ما دلته کارولی دی. ما دلته لومړی لیک لوی کړی دی، دا هغه څه دي چې موږ یې د پاسکل نومولو کنوانسیون وایو. دا کنوانسیون له هغه یو څخه توپیر لري چې موږ یې د خپلو متغیرونو او دندو نومولو لپاره کاروو د کوم لپاره چې موږ تل کوچني توري کاروو او د انډر سکور په کارولو سره ډیری کلمې جلا کوو. مګر کله چې ټولګیو نومول کیږي، موږ د دې پرځای د څو کلمو جلا کولو لپاره انډر سکور نه کاروو، موږ د هرې کلمې لومړی توری لوی کړو.
زموږ د ټولګي تعریف کولو وروسته، کولن کارول کیږي چې پدې معنی چې اوس یو بلاک تعریف شوی.
class Point:
def move (self):
په دې بلاک کې، موږ کولی شو ټولې دندې یا میتودونه تعریف کړو چې د نقطو سره تړاو لري. د مثال په توګه، موږ کولی شو د یوې نقطې حرکت کولو لپاره د "حرکت" په نوم یو فنکشن تعریف کړو. په یاد ولرئ چې څومره ژر چې موږ خلاص قوس ټایپ کړو، PyCharm په اتوماتيک ډول دلته "ځان" اضافه کوي. دا یو ځانګړی کلیدی دی او اجازه راکړئ چې په لنډ وخت کې بیرته راشم. راځئ چې په ترمینل کې "حرکت" چاپ کړو.
print("move")
راځئ چې یو بل میتود تعریف کړو لکه "ډرا" او په ټرمینل کې یې چاپ کړئ.
def draw(self):
print("draw")
موږ زموږ د "پوائنټ" ټولګي تعریف سره بشپړ کړی. د دې نوي ډول سره، موږ کولی شو نوي شیان جوړ کړو. یو ټولګی په ساده ډول د شیانو د جوړولو لپاره بلو پرینټ یا ټیمپلیټ تعریفوي کوم چې د دې بلو پرنٹ پراساس اصلي مثالونه دي. د یو څیز د جوړولو لپاره، موږ د خپل ټولګي نوم ټایپ کوو او بیا ورته د فنکشن په څیر غږ کوو. دا یو نوی څیز جوړوي او بیا یې بیرته راګرځوي. بیا موږ کولی شو دا څیز په متغیر کې ذخیره کړو. اجازه راکړئ تاسو ته وښیم:
دلته موږ یو "پوائنټ 1" تعریف کړی کوم چې یو درې اړخیز ټکی دی. تاسو کولی شئ دا وګورئ، موږ کولی شو انفرادي همغږي په ترمینل کې چاپ کړو.
موږ کولی شو د دې ټکي سره دوه میتودونه "را" او "حرکت" وکاروو.
نو د بیاکتنې لپاره، موږ ټولګي کاروو ترڅو نوي ډولونه تعریف کړو او دا ډولونه کولی شي هغه میتودونه ولري چې موږ یې د ټولګي په بدن کې تعریف کوو. ټولګي کولی شي ځانګړتیاوې ولري چې موږ کولی شو په خپلو برنامو کې هرچیرې تنظیم کړو.
جوړونکي
تر اوسه پورې، موږ زده کړل چې څنګه د ټولګیو په کارولو سره نوي ډولونه جوړ کړو. اوس د دې پلي کولو سره یوه کوچنۍ ستونزه شتون لري. موږ کولی شو د ټولګیو په کارولو سره د 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 همغږي تازه کړو:
point = Point(10, 20)
point.x = 11
print(point.x)
اوس، د x همغږي د 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")
موږ د "چل" میتود سره یو ټولګی "سپی" رامینځته کړی. په دې طریقه کې، موږ په ساده ډول په ټرمینل کې د واک پیغام چاپ کوو. راځئ چې ووایو ، په ریښتیني برنامه کې ، دلته یوازې د یوې کرښې پرځای د کوډ لس لینونه شتون لري. په راتلونکي کې، که بل ټولګي ته د "چل" طریقې ته اړتیا وي، موږ باید دا ټول کوډ تکرار کړو. دا مثالی ندی.
په برنامه کولو کې، موږ د DRY په نوم یو اصول لرو چې د ځان تکرار کولو لپاره لنډ دی. راځئ چې په راتلونکي کې یو څه ووایو، موږ د خپل "چل" طریقې سره ستونزه پیدا کوو او که چیرې موږ دا طریقه په ډیرو نورو ځایونو کې تکرار یا نقل کړې وي، نو موږ به بیرته راشو او دا ستونزه په هر هغه ځای کې حل کړو چې موږ دا نقل کړی وي. کوډ نو له همدې امله په برنامه کې موږ باید یو څه دوه ځله تعریف نه کړو.
د دې ستونزې د هواري لپاره مختلفې لارې چارې شته، خو دلته موږ هغه یوه زده کوو چې د پیل کونکو لپاره اسانه وي او ورته میراث ویل کیږي. په دې حالت کې، موږ به یو بل ټولګي "تیار" جوړ کړو او په دې ټولګي کې به زموږ "چل" صفت تعریف کړو.
class Mammal:
def walk(self):
print("walk")
زموږ د "تیلی" ټولګي تعریف کولو وروسته موږ کولی شو د میراث څخه کار واخلو ترڅو د لاندې ځانګړتیاو تیر کړو:
د سپي او پیشو ټولګي دواړه ټول ټولګي میتودونه په میراث کې دي چې د دوی په پلرنۍ ټولګي کې تعریف شوي. اوس، موږ کولی شو د سپي لپاره ځانګړي میتودونه اضافه کړو:
class Dog:
def bark(self):
print("bark")
و نغاړئ!
دا ټول د ټولګیو، جوړونکو او د میراث مفکورو سره په ټولګیو کې د کوډ بیا کارولو په اړه وو. اوس موږ زموږ د لړۍ پای ته نږدې یو. پدې مرحله کې ، تاسو باید وړتیا ولرئ چې په پایتون کې ښه ، د لوستلو وړ او لنډ کوډونه تولید کړئ.
موږ به په راتلونکي لیکچر کې د ماډلونو او کڅوړو مفهوم وګورو.
یو ځواب ورکړئ ووځي