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

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 کے کردار کو سمجھنا

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

دوسرا اسکرپٹ کے استعمال کی وضاحت کرتا ہے۔ @classmethod. کے برعکس @staticmethod, a @classmethod کلاس کو خود پہلی دلیل کے طور پر حاصل کرتا ہے، جسے عام طور پر نام دیا جاتا ہے۔ cls. یہ طریقہ کو کلاس لیول کی صفات تک رسائی اور ان میں ترمیم کرنے کی اجازت دیتا ہے۔ مثال میں، from_sum طریقہ دو دلائل لیتا ہے، انہیں ایک ساتھ جوڑتا ہے، اور کی ایک نئی مثال واپس کرتا ہے۔ MyClass اس کی رقم کے ساتھ value وصف. یہ پیٹرن اکثر فیکٹری کے طریقوں کے لیے استعمال ہوتا ہے جو مختلف طریقوں سے مثالیں بناتے ہیں۔ کا استعمال کرتے ہوئے 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}")

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

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

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

@staticmethod اور @classmethod کے بارے میں عام سوالات

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

میتھڈ ڈیکوریٹرز پر کلیدی ٹیک ویز

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