কম্পিউটার টিউটোরিয়াল

পাইথন - ক্লাস এবং মেথডের ভিতরে ও বাইরে ভেরিয়েবল ব্যবহার

পাইথনে ভেরিয়েবল স্কোপ (scope) বোঝা ক্লাস ডিজাইন এবং বাগ এড়াতে অত্যন্ত গুরুত্বপূর্ণ। নিচে ক্লাসের বাইরের (গ্লোবাল), ক্লাসের ভিতরে (ক্লাস ভেরিয়েবল), এবং মেথডের ভিতরে (লোকাল) ভেরিয়েবলের ব্যবহার দেখানো হলো।

১. ক্লাসের বাইরে ডিফাইন করা ভেরিয়েবল (গ্লোবাল/মডিউল লেভেল)

# ক্লাসের বাইরে ডিফাইন করা ভেরিয়েবল
outVar = 'outside_class'

print("OutSide_class1:", outVar)

class Ctest:
    print("OutSide_class2:", outVar)  # ক্লাস বডি এক্সিকিউট হয়ে গেলে প্রিন্ট হয়
    
    def access_method(self):
        print("OutSide_class3:", outVar)  # মেথড কল হলে প্রিন্ট হয়

# অবজেক্ট তৈরি করে মেথড কল
uac = Ctest()
uac.access_method()

# অন্য ক্লাসও অ্যাক্সেস করতে পারে
class Another_Ctest_class:
    print("OutSide_class4:", outVar)
    
    def another_access_method(self):
        print("OutSide_class5:", outVar)

uaac = Another_Ctest_class()
uaac.another_access_method()

আউটপুট:

OutSide_class1: outside_class
OutSide_class2: outside_class
OutSide_class3: outside_class
OutSide_class4: outside_class
OutSide_class5: outside_class

২. মেথডের ভিতরে ডিফাইন করা ভেরিয়েবল (লোকাল স্কোপ)

class Ctest:
    def access_method(self):
        # মেথডের ভিতরে ডিফাইন করা ভেরিয়েবল
        inVar = 'inside_method'
        print("Inside_method3:", inVar)

uac = Ctest()
uac.access_method()

# অন্য ক্লাসের মেথড থেকে অ্যাক্সেস করা যাবে না
class AnotherCtest:
    def access_method(self):
        # print(inVar)  # NameError: name 'inVar' is not defined
        pass

uaac = AnotherCtest()
uaac.access_method()

৩. ক্লাস ভেরিয়েবল vs ইনস্ট্যান্স ভেরিয়েবল

class MyClass:
    class_var = "I am class variable"  # সব ইনস্ট্যান্স শেয়ার করে
    
    def __init__(self, val):
        self.instance_var = val  # প্রতিটি ইনস্ট্যান্সের আলাদা
    
    def show(self):
        print(f"Class: {self.class_var}, Instance: {self.instance_var}")

obj1 = MyClass("First")
obj2 = MyClass("Second")

obj1.show()  # Class: I am class variable, Instance: First
obj2.show()  # Class: I am class variable, Instance: Second

# ক্লাস ভেরিয়েবল পরিবর্তন
MyClass.class_var = "Changed"
obj1.show()  # Class: Changed, Instance: First
obj2.show()  # Class: Changed, Instance: Second

সারসংক্ষেপ টেবিল

ভেরিয়েবল টাইপস্কোপলাইফটাইমঅ্যাক্সেস
গ্লোবাল (মডিউল লেভেল)পুরো মডিউলপ্রোগ্রাম চলার পর্যন্তযেকোনো জায়গা থেকে
ক্লাস ভেরিয়েবলক্লাস এবং ইনস্ট্যান্সক্লাস লোড হওয়ার থেকেClassName.var বা self.var
ইনস্ট্যান্স ভেরিয়েবল (self.x)নির্দিষ্ট ইনস্ট্যান্সইনস্ট্যান্স লাইফটাইমself.var দিয়ে মেথডে
লোকাল ভেরিয়েবল (মেথডে)শুধু সেই মেথডমেথড এক্সিকিউশন পর্যন্তশুধু সেই মেথডের ভিতরে
সেরা অনুশীলন: গ্লোবাল ভেরিয়েবল কম से কম ব্যবহার করুন। ক্লাস ভেরিয়েবল শুধু কনস্ট্যান্ট বা শেয়ার্ড স্টেটের জন্য ব্যবহার করুন। ইনস্ট্যান্স ডেটার জন্য সবসময় self.x ব্যবহার করুন।
  1. Python ব্যবহার করে একটি শহরের দ্রাঘিমাংশ এবং অক্ষাংশ কীভাবে পাবেন?

  2. Matplotlib ব্যবহার করে কমান্ড ও X-অক্ষের মধ্যবর্তী অঞ্চল পূরণ করা

  3. পাইথনে POST মেথড ব্যবহার করে তথ্য পাস করা

  4. পাইথনে স্ক্রিনে আউটপুট করার সম্পূর্ণ গাইড