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

পাইথনে ফাংশন ওভারলোডিং করার পদ্ধতি

পাইথন ট্রাডিশনাল মানে (সেম নাম, আলাদা সিগনেচার) ফাংশন ওভারলোডিং সাপোর্ট করে না — последের ডেফিনিশন আগেরটিকে ওভাররাইড করে। তবে ডিফল্ট আর্গামেন্ট, *args, **kwargs, বা @singledispatch ব্যবহার করে ওভারলোডিং-সদৃশ আচরণ অর্জন করা যায়।

পদ্ধতি ১: ডিফল্ট আর্গামেন্ট (সিম্পলেস্ট)

class Human:
    def sayHello(self, name=None):
        if name is not None:
            print('Hello ' + name)
        else:
            print('Hello ')

obj = Human()
obj.sayHello()           # Hello
obj.sayHello('Rambo')    # Hello Rambo

পদ্ধতি ২: *args / **kwargs

def greet(*names):
    for name in names:
        print(f"Hello {name}")

greet()                    # (কিছু প্রিন্ট হয় না)
greet("Alice")             # Hello Alice
greet("Alice", "Bob")      # Hello Alice \n Hello Bob

পদ্ধতি ৩: @singledispatch (ফাংশন ওভারলোডিং আসল)

from functools import singledispatch

@singledispatch
def process(data):
    raise NotImplementedError(f"Unsupported type: {type(data)}")

@process.register(int)
def _(data):
    print(f"Integer: {data * 2}")

@process.register(str)
def _(data):
    print(f"String: {data.upper()}")

@process.register(list)
def _(data):
    print(f"List length: {len(data)}")

process(10)        # Integer: 20
process("hello")   # String: HELLO
process([1,2,3])   # List length: 3

পদ্ধতি ৪: টাইপ হিন্ট + متعددة ডিসপ্যাচ (multipledispatch লাইব্রেরি)

pip install multipledispatch
from multipledispatch import dispatch

@dispatch(int, int)
def add(a, b):
    return a + b

@dispatch(str, str)
def add(a, b):
    return a + b

print(add(2, 3))       # 5
print(add("Hello", "World"))  # HelloWorld

সারাংশ

  1. Matplotlib-এ মাল্টিভ্যারিয়েট ফাংশন প্লট করুন

  2. পাইথনে বোকেহ (Bokeh) ব্যবহার করে স্টেপ লাইন প্লট (Step line plot) তৈরি করার পদ্ধতি

  3. Python-এ Matplotlib ব্যবহার করে সাইন ফাংশন কীভাবে তৈরি করা যায়?

  4. পাইথনে Seaborn-র factorplot দিয়ে ডেটা ভিজ্যুয়ালাইজ করার পদ্ধতি

কপিরাইট © https://bd.wsxdn.com সমস্ত অধিকার সংরক্ষিত
পদ্ধতিউপযোগিতা
ডিফল্ট আর্গামেন্টসিম্পল, কম প্যারামিটার
*args/**kwargsভেরিয়েবল সংখ্যক আর্গামেন্ট
@singledispatchসিঙ্গল আর্গামেন্ট টাইপ ভিত্তিক ডিসপ্যাচ (স্ট্যান্ডার্ড লাইব্রেরি)
multipledispatchমাল্টি-আর্গামেন্ট টাইপ ভিত্তিক ডিসপ্যাচ