python oop

Python Closures

Python Closures বোঝার পূর্বে আমাদেরকে nested functions আগে বুঝতে হবে।
Nested Function কী?
Nested ফাংশন বলতে বুঝায়, যখন কোন ফাংশন কে আরেকটি ফাংশন এর মধ্যে Define করা হয় তখন তাকে nested ফাংশন বলে। Nested ফাংশন গুলো সাধারনত তাদের মূল ফাংশনের ভ্যারিয়েবল গুলো কে অ্যাাক্সেস করতে পারে।
মূল ফাংশনের বাহিরে অন্য কোন ভ্যারিয়েবল গুলো Nested ফাংশনের মধ্যে অ্যাাক্সেস করা যাবে না।
এককথায় বলে, nested ফাংশন, parent ফাংশন এর variable গুলো কে access করতে পারে।

নিচে একটি Nested ফাংশনের উদাহরন দেয়া হলঃ

def outerFunction():
    value = 'Outer'
    
    def innerFunction():
        print('I am from Inner ')
        print('I am from',value)
    
    innerFunction()
    
outerFunction()

output
// I am from Inner                                                                                                               
// I am from Outer

Closure কী ???
Python Closure বলতে একটি function এর মধ্যে আরেকটি nested ফাংশনের scope এর মধ্যে কোন ভ্যালুর reference কে বোঝায়। Closure হচ্ছে একটি ফাংশন object ।
নিচের কোডটিতে একটি Python Closure এর উদাহরন দেয়া হলঃ

def outer_func(n):
    def inner_func(x):
        print(n*x)
    return inner_func

inner_value = outer_func(1)
inner_value_2 = outer_func(10)

inner_value(5)    // output: 5
inner_value_2(8)  // output: 80

উপরের কোডে দেখা যাচ্ছে যে, আমাদের parent ফাংশনের মধ্যে assign করা ভ্যালু কে nested ফাংশনের মধ্যে ব্যবহার করতে পারছি।
Python Closure এর একটি মূল criteria  হচ্ছে, parent ফাংশনটিকে অবশ্যই nested ফাংশন কে return করতে হবে।

def outerFunction(txt, digit):
    age = digit
    
    def innerFunction():
        name = "Mr. "+txt
        print("Name is: ",name)
        print("Age is: ",digit)
        
    return innerFunction

outerFunc = outerFunction('Hasan', 28)
outerFunc()

Output:
Name is:  Mr. Hasan                                                                                                           
Age is:  28  

Closure কেন ব্যবহার করব ???
যখন দেখব আমাদের কোন python class এর মধ্যে শুধু মাত্র কিছু (অনেক ক্ষেত্রে ১টি) ফাংশন থাকবে তখন আমরা python class ব্যবহার না করে python closure ব্যবহার করতে পারি। closure আমাদেরকে সাধারনত ডাটা Hiding এর feature দেয়।
কিন্তু মনে রাখতে হবে, যখন অনেক attributes, methods লাগবে তখন python closure ব্যবহার না করে python class ব্যবহার করাটাই উত্তম হবে।

Leave a comment