Python میں @staticmethod اور @classmethod کے درمیان فرق کو سمجھنا

Python

Python طریقہ ڈیکوریٹرز میں کلیدی امتیازات

Python میں، @staticmethod اور @classmethod کے درمیان باریکیوں کو سمجھنا موثر آبجیکٹ پر مبنی پروگرامنگ کے لیے بہت ضروری ہے۔ یہ ڈیکوریٹرز کلاس کے اندر طریقوں کی وضاحت کے لیے استعمال کیے جاتے ہیں، لیکن وہ مختلف مقاصد کی تکمیل کرتے ہیں اور ان کے الگ رویے ہوتے ہیں۔

اگرچہ دونوں کو ایک مثال بنائے بغیر کلاس میں بلایا جا سکتا ہے، لیکن وہ جس طرح سے اپنے دلائل کو ہینڈل کرتے ہیں اور ان کا استعمال کرنے کا ارادہ کیا جاتا ہے اس میں نمایاں فرق ہوتا ہے۔ یہ مضمون فرقوں کو تلاش کرتا ہے، واضح مثالیں فراہم کرتا ہے کہ ہر ڈیکوریٹر کو کب استعمال کرنا ہے۔

کمانڈ تفصیل
@staticmethod ایک طریقہ کی وضاحت کرتا ہے جو کلاس کی حالت تک رسائی یا ترمیم نہیں کرتا ہے۔ اسے کلاس میں ہی بلایا جاتا ہے، مثالوں پر نہیں۔
@classmethod ایک طریقہ کی وضاحت کرتا ہے جو کلاس کو پہلی دلیل کے طور پر حاصل کرتا ہے۔ یہ فیکٹری کے طریقوں یا طریقوں کے لیے استعمال ہوتا ہے جن کو طبقاتی حالت میں ترمیم کرنے کی ضرورت ہوتی ہے۔
cls کلاس کے طریقہ کار میں کلاس کی نمائندگی کرتا ہے، کلاس کی صفات اور دیگر طبقاتی طریقوں تک رسائی کی اجازت دیتا ہے۔
from_sum(cls, arg1, arg2) ایک کلاس کا طریقہ جو کلاس کی مثال واپس کرتا ہے، @classmethod کے استعمال کو ظاہر کرتا ہے۔
print() کنسول میں نتیجہ یا قدر نکالتا ہے، طریقوں کے نتائج کو ظاہر کرنے کے لیے مفید ہے۔
self.value مثال کی خصوصیت کلاس کے طریقہ کار کے ذریعہ تخلیق کردہ مثال کے لئے مخصوص ڈیٹا کو ذخیرہ کرنے کے لئے استعمال ہوتی ہے۔
return cls(arg1 + arg2) فراہم کردہ دلائل کے مجموعے کے ساتھ کلاس کی ایک نئی مثال بناتا اور واپس کرتا ہے۔

@staticmethod اور @classmethod کے کردار کو سمجھنا

پہلی اسکرپٹ کے استعمال کو ظاہر کرتی ہے۔ ازگر میں اے ایک طریقہ ہے جو کلاس سے تعلق رکھتا ہے لیکن کلاس کی حالت تک رسائی یا ترمیم نہیں کرتا ہے۔ اس کا مطلب ہے کہ یہ مثال کے متغیرات یا کلاس متغیرات تک رسائی حاصل نہیں کرسکتا۔ اس کے بجائے، یہ ایک باقاعدہ فنکشن کی طرح برتاؤ کرتا ہے جو کلاس کے نام کی جگہ سے تعلق رکھتا ہے۔ مثال میں، دو دلائل لیتا ہے اور ان کی رقم لوٹاتا ہے۔ اسے براہ راست کلاس پر بلایا جاتا ہے۔ MyClass کلاس کی مثال بنانے کی ضرورت کے بغیر۔ یہ خاص طور پر افادیت کے طریقوں کے لیے مفید ہے جو کلاس کی حالت سے الگ تھلگ کام انجام دیتے ہیں۔

دوسرا اسکرپٹ کے استعمال کی وضاحت کرتا ہے۔ . کے برعکس , a کلاس کو خود پہلی دلیل کے طور پر حاصل کرتا ہے، جسے عام طور پر نام دیا جاتا ہے۔ cls. یہ طریقہ کو کلاس لیول کی صفات تک رسائی اور ان میں ترمیم کرنے کی اجازت دیتا ہے۔ مثال میں، طریقہ دو دلائل لیتا ہے، انہیں ایک ساتھ جوڑتا ہے، اور کی ایک نئی مثال واپس کرتا ہے۔ اس کی رقم کے ساتھ وصف. یہ پیٹرن اکثر فیکٹری کے طریقوں کے لیے استعمال ہوتا ہے جو مختلف طریقوں سے مثالیں بناتے ہیں۔ کا استعمال کرتے ہوئے cls، طریقہ اس بات کو یقینی بناتا ہے کہ یہ صحیح طریقے سے کام کرتا ہے یہاں تک کہ اگر کلاس کو ذیلی کلاس کیا گیا ہو۔

Python میں @staticmethod اور @classmethod کے درمیان فرق

Python پروگرامنگ کی مثال: @staticmethod کا استعمال

class MyClass:
    @staticmethod
    def static_method(arg1, arg2):
        return arg1 + arg2

# Calling the static method
result = MyClass.static_method(5, 10)
print(f"Result of static method: {result}")

Python میں @classmethod کو دریافت کرنا

Python پروگرامنگ کی مثال: @classmethod کا استعمال

class MyClass:
    def __init__(self, value):
        self.value = value

    @classmethod
    def from_sum(cls, arg1, arg2):
        return cls(arg1 + arg2)

# Creating an instance using the class method
obj = MyClass.from_sum(5, 10)
print(f"Value from class method: {obj.value}")

ازگر میں میتھڈ ڈیکوریٹرز کی تفصیلی تلاش

کا ایک اور اہم پہلو اور Python میں ان کے استعمال کے معاملات ہیں اور وہ کوڈ کی تنظیم اور برقرار رکھنے کو کیسے بہتر بنا سکتے ہیں۔ اے اس وقت بہترین استعمال کیا جاتا ہے جب آپ کو کسی ایسے فنکشن کی ضرورت ہو جو منطقی طور پر کسی کلاس سے تعلق رکھتا ہو لیکن اسے کسی کلاس کے مخصوص ڈیٹا تک رسائی کی ضرورت نہ ہو۔ اس سے کلاس کے اندر متعلقہ فنکشنلٹیز کو گروپ کرنے میں مدد ملتی ہے، جس سے کوڈ زیادہ بدیہی اور پڑھنے میں آسان ہوتا ہے۔ مثال کے طور پر، یوٹیلیٹی فنکشنز جیسے تبادلوں کے طریقے یا آپریشن جو کسی چیز کی حالت کو تبدیل نہیں کرتے ہیں، کو جامد طریقوں سے تعبیر کیا جا سکتا ہے۔ یہ نہ صرف کوڈ کی ماڈیولریٹی کو بڑھاتا ہے بلکہ کلاسوں کے غیر ضروری انسٹی ٹیشن کو بھی روکتا ہے۔

دوسری طرف، اے جب آپ کو فیکٹری کے طریقے بنانے یا طبقاتی حالت کو تبدیل کرنے کی ضرورت ہو تو یہ انمول ہے۔ فیکٹری کے طریقے اشیاء کی تخلیق کے طریقہ کار پر زیادہ کنٹرول فراہم کر سکتے ہیں، جو کہ سنگلٹن جیسے ڈیزائن کے نمونوں کو لاگو کرنے میں خاص طور پر کارآمد ثابت ہو سکتا ہے، جہاں آپ کو یہ یقینی بنانا ہوگا کہ کلاس کی صرف ایک مثال بنائی جائے۔ مزید برآں، ان پٹ پیرامیٹرز کی بنیاد پر مختلف ذیلی طبقات کی مثالیں واپس کرنے والے طریقے بنا کر پولیمورفزم کو نافذ کرنے کے لیے استعمال کیا جا سکتا ہے۔ طبقاتی حالت اور رویے میں ترمیم کرنے کی یہ صلاحیت کلاس کے طریقوں کو جدید آبجیکٹ اورینٹڈ پروگرامنگ میں ایک طاقتور ٹول بناتی ہے، جس سے مزید لچکدار اور دوبارہ قابل استعمال کوڈ ڈھانچے کی اجازت ملتی ہے۔

  1. کیا ہے ?
  2. اے ایک ایسا طریقہ ہے جو کلاس سٹیٹ تک رسائی یا اس میں ترمیم نہیں کرتا ہے اور اسے بغیر کسی مثال کے کلاس پر بلایا جا سکتا ہے۔
  3. کیا ہے ?
  4. اے ایک ایسا طریقہ ہے جو کلاس کو اپنی پہلی دلیل کے طور پر حاصل کرتا ہے، جس سے اسے کلاس کی حالت میں ترمیم کرنے یا کلاس کی مثالیں تخلیق کرنے کی اجازت ملتی ہے۔
  5. آپ کو کب استعمال کرنا چاہئے a ?
  6. استعمال کریں یوٹیلیٹی فنکشنز کے لیے جو منطقی طور پر کسی کلاس سے تعلق رکھتے ہیں لیکن کلاس یا مثال کے ڈیٹا تک رسائی کی ضرورت نہیں ہے۔
  7. آپ کو کب استعمال کرنا چاہئے a ?
  8. استعمال کریں فیکٹری کے طریقوں یا طریقوں کے لیے جن کو طبقاتی حالت میں ترمیم کرنے کی ضرورت ہے۔
  9. کر سکتے ہیں۔ کلاس کی خصوصیات تک رسائی حاصل کریں؟
  10. نہیں، اے کلاس کے اوصاف تک رسائی یا ترمیم نہیں کر سکتا۔
  11. کر سکتے ہیں۔ کلاس کی خصوصیات تک رسائی حاصل کریں؟
  12. ہاں ایک کلاس کے اوصاف تک رسائی اور ان میں ترمیم کر سکتے ہیں۔
  13. آپ کس طرح فون کرتے ہیں a ?
  14. آپ ایک کو کال کریں۔ کلاس کا نام استعمال کرتے ہوئے، جیسے .
  15. آپ کس طرح فون کرتے ہیں a ?
  16. آپ ایک کو کال کریں۔ کلاس کا نام استعمال کرتے ہوئے، جیسے ، اور یہ کلاس کو پہلی دلیل کے طور پر حاصل کرتا ہے۔
  17. کر سکتے ہیں۔ مثال کے اعداد و شمار میں ترمیم کریں؟
  18. نہیں، اے مثال کے اعداد و شمار میں ترمیم نہیں کر سکتا کیونکہ اسے مثال کا کوئی حوالہ نہیں ملتا ہے۔
  19. کر سکتے ہیں۔ ذیلی طبقات کے ذریعہ اوور رائڈ کیا جائے؟
  20. ہاں ایک خصوصی طرز عمل فراہم کرنے کے لیے ذیلی طبقات کے ذریعے اوور رائیڈ کیا جا سکتا ہے۔

آخر میں، دونوں اور Python کوڈ کی ساخت کے لیے الگ الگ فوائد پیش کرتے ہیں۔ اگرچہ جامد طریقے افادیت کے افعال کے لیے مثالی ہیں جن کے لیے کلاس یا مثال کے لیے مخصوص ڈیٹا تک رسائی کی ضرورت نہیں ہے، کلاس کے طریقے کارخانے کے طریقوں اور طبقاتی سطح کے صفات میں ترمیم کرنے کے لیے طاقتور ہیں۔ ہر ڈیکوریٹر کے لیے اختلافات اور مناسب استعمال کے معاملات کو پہچاننا آبجیکٹ پر مبنی پروگرامنگ میں کوڈ کی وضاحت، برقرار رکھنے اور مجموعی ڈیزائن کو نمایاں طور پر بڑھا سکتا ہے۔