قاعدے (METHODS)
اب تک ہم نے کلاس کے متعلق جو بھی کام کیا وہ بہت سادہ تھا اور صرف کلاس بنانے اور متغیرات کو محفوظ کرنے تک محدود تھا۔ اب ہم کچھ آگے بڑھیں گے۔
CLASS METHODS
سادہ لفظوں میں یوں سمجھیے کہ وہ فنکشنز (Functions) جو کسی کلاس کے بلاک میں بنائے جاتے ہیں قاعدے (Methods) کہلاتے ہیں۔ کسی کلاس (class) میں قاعدہ (method) بالکل ویسا ہی ہوتا ہے جیسا کہ ہم ایک عمومی فنکشن (function) بناتے ہیں۔ سوائے ایک فرق کے۔ اور وہ یہ کہ کلاس (class) میں موجود قاعدے (method) کو ایک دلیل self ضرور دیا جاتا ہے۔ سو جب پائتھون فنکشن کو کال کرتا ہے یہ (self) متعلقہ مفعول (current object) کو بطور پہلی دلیل فراہم کر دیتا ہے۔ رہا یہ سوال کہ اس مقصد کے لئے self ہی کیوں لکھا جاتا ہے تو اس کا جواب یہ ہے کہ ایسا روایت کے طور پر (By Convention) کیا جاتا ہے (اور احسن سمجھا جاتا ہے )۔ گو کہ اس لفظ کا لکھنا ضروری نہیں ہے تاہم زیادہ بہتر یہی ہے کہ self کا لفظ ہی استعمال کیا جائے تاکہ بعد میں دیکھنے پر کوڈ لکھنے والے کو اور کسی دوسرے کوڈ کے پڑھنے والے کو بھی سمجھنے میں آسانی رہے۔ ++c اور java میں اس مقصد کے this کا keyword استعمال کیا جاتا ہے۔
اب ہم یہی بات ایک مثال کی مدد سے سمجھتے ہیں۔ فرض کیجے کہ ہم اپنی pet والی کلاس میں ایک قاعدہ (method) بناتے ہیں جس کا نام sleep ہے۔
یہ کوڈ دیکھیے:
PHP:
>>> class pet:
number_of_legs= 0
def sleep (self):
print ("zzz")
>>> cat = pet()
>>> cat.sleep()
zzz
>>>
جیسا کہ اوپر بیان کیا گیا ہے یہ قاعدہ (method) بالکل اسی طرز پر بنایا گیا ہے جیسا کہ فنکشن بنائے جاتے ہیں۔ یعنی سب سے پہلے def کا keyword پھر قاعدے کا نام اور پھر دو عدد قوسین۔ اور قوسین کے مابین ایک دلیل (argument) جیسا کہ بتایا گیا self کے نام سے۔
قاعدے (method) کو کال بھی ویسے ہی کیا جاتا ہے جیسا کہ کلاس میں موجود متغیرات کو کیا جاتا ہے۔ یہاں جب ہم نے ()cat.sleep کو کال کیا تو نتیجے میں پائتھون نے zzz پرنٹ کیا ہے جو ہمارے دیئے گئے کوڈ کے عین مطابق ہے۔
*****
اب ہم اپنی کلاس pet میں ایک اور فنکشن بناتے ہیں جس کا نام ہوگا count_legs۔ یہ فنکشن ہمیں self کے آرگیومینٹ کو مزید سمجھنے میں مدد دے گا۔
PHP:
>>> class pet:
number_of_legs = 0
def sleep (self):
print ('zzz')
def count_legs (self):
print ("I have %s legs"%self.number_of_legs)
sleep method کی طرح ہم نے count_legs میں بھی ایک آرگیومینٹ self فراہم کیا ہے۔ یہ self ہمیشہ اس مفعول (Object) کا حوالہ ہوگا جس پر اس قاعدے (method ) کو کال کیا جائے گا۔
count_legs میں ہم نے اپنے مفعول (جو ایک پالتو جانور ہوگا) کی ٹانگوں کی تعداد پرنٹ کروائی ہے۔ چونکہ کلاس بناتے وقت ہمیں نہیں معلوم کہ اس method کو کس object کے ساتھ کال کیا جائے گا سو ہم Object کے حوالے کے لئے متغیر (variable) کے نام کے ساتھ self لکھتے ہیں۔ یعنی کلاس میں متغیر کو کال کرنے کا اظہاریہ کچھ یوں ہوتا ہے۔ self.name_of_variable
ذیل میں ہم نے دو مختلف مفعول (Object) پر count_legs کے قاعدے (method ) کو کال کیا ہے۔ آپ دیکھ سکتے ہیں کہ مفعول اور اس سے منسلکہ معلومات کے مطابق دونوں کالز کا نتیجہ مختلف ہے۔
PHP:
>>> cat = pet()
>>> cat.number_of_legs = 4
>>> cat.count_legs()
I have 4 legs
>>>
>>> duck = pet()
>>> duck.number_of_legs = 2
>>> duck.count_legs()
I have 2 legs
>>>
پہلی مثال (instance) میں جب ہم نے count_legs کے قاعدے (method ) کو cat کے ساتھ کال کیا تو فنکشن نے pet کی ٹانگوں کی تعداد 4 بتائی۔ جب کہ یہی عمل جب duck کے مفعول (Object) کے ساتھ کال کیا تو جواب 2 رہا۔
اس سے پتہ چلا کہ کوئی بھی کلاس اس طرح سے بنائی جاتی ہے کہ وہ ہر مفعول (Object or Instance of the class) کو انفرادی حیثیت فراہم کرنے کے قابل ہو۔ اس بات کو یوں بھی سمجھا جا سکتا ہےکہ کلاس کی مدد سے تیار کیا جانے والا ہر آبجیکٹ اپنی منفرد حیثیت اور اوصاف رکھتا ہے۔