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

পাইথনে ডেটা ক্লাস (dataclasses)

dataclasses পাইথনের স্ট্যান্ডার্ড লাইব্রেরিতে একটি নতুন মডিউল যা সংস্করণ ৩.৭ থেকে যোগ করা হয়েছে। এটি @dataclass ডেকোরেটর সংজ্ঞায়িত করে যা একটি ইউজার-ডিফাইন্ড ক্লাসের জন্য কনস্ট্রাক্টর ম্যাজিক মেথড __init__(), স্ট্রিং রিপ্রেজেন্টেশন মেথড __repr__(), == অপারেটর ওভারলোড করার __eq__() মেথড (এবং আরও কিছু) স্বয়ংক্রিয়ভাবে জেনারেট করে।

dataclass ডেকোরেটর সিগনেচার

dataclass(init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False)

সকল আর্গুমেন্ট বুলিয়ান মান নেয় যা নির্দেশ করে সংশ্লিষ্ট ম্যাজিক মেথড বা মেথডগুলোর স্বয়ংক্রিয় জেনারেশন হবে কিনা।

  • init আর্গুমেন্ট ডিফল্টভাবে True। এটি ক্লাসের জন্য __init__() মেথড স্বয়ংক্রিয়ভাবে জেনারেট করে।
  • repr আর্গুমেন্টও ডিফল্টভাবে True। অতএব __repr__() মেথড স্বয়ংক্রিয়ভাবে জেনারেট হবে। __repr__() হলো অবজেক্টের ফরম্যাল স্ট্রিং রিপ্রেজেন্টেশন। যদি ক্লাসটি ইতিমধ্যে __repr__() সংজ্ঞায়িত করে থাকে, তবে এই প্যারামিটার উপেক্ষা করা হয়।
  • eq আর্গুমেন্ট ডিফল্টভাবে True। এটি __eq__() মেথড অটো-জেনারেট করে। এই মেথড সমানতা তুলনা অপারেটর (==) এর প্রতিক্রিয়ায় কল হয়। আবার, যদি ক্লাসটি ইতিমধ্যে __eq__() সংজ্ঞায়িত করে থাকে, তবে এই প্যারামিটার উপেক্ষা করা হয়।
  • order প্যারামিটার True হলে (ডিফল্ট False), তুলনার জন্য ম্যাজিক মেথড __lt__(), __le__(), __gt__(), এবং __ge__() অটো-জেনারেট হবে, যা যথাক্রমে <, <=, >, এবং >= অপারেটর ইমপ্লিমেন্ট করে। order True এবং eq False হলে ValueError উত্থাপিত হয়। যদি ক্লাসটি ইতিমধ্যে এই মেথডগুলোর যেকোনো একটি সংজ্ঞায়িত করে থাকে, তবে TypeError হয়।
  • unsafe_hash আর্গুমেন্ট False হলে (ডিফল্ট), eq এবং frozen কীভাবে সেট আছে তার অনুযায়ী __hash__() মেথড জেনারেট হয়।
  • frozen আর্গুমেন্ট: True হলে (ডিফল্ট False), রিড-অনলি ফ্রোজেন ইনস্ট্যান্স অনুকরণ করে।

উদাহরণ

Student ক্লাসটি dataclass ডেকোরেটর ব্যবহার করে নিচের মত করে ডিফাইন করা যাক:

from dataclasses import dataclass
@dataclass
class Student(object):
    name: str
    age: int
    percent: float

স্বয়ংক্রিয়ভাবে জেনারেট হওয়া __init__() মেথড হবে:

def __init__(self, name: str, age: int, percent: float):
    self.name = name
    self.age = age
    self.percent = percent

যদি ক্লাসটি স্পষ্টভাবে __init__() মেথড সংজ্ঞায়িত করে, তবে init প্যারামিটার উপেক্ষা করা হয়।

>>> from dataclasses import Student
>>> s1 = Student('Naveen', 21, 50.50)
>>> s2 = Student('Mangesh', 20, 50.00)
>>> s1 == s2
False

asdict()

এই ফাংশন ক্লাস ইনস্ট্যান্সকে একটি ডিকশনারি অবজেক্টে রূপান্তর করে।

>>> import dataclasses
>>> dataclasses.asdict(s1)
{'name': 'Naveen', 'age': 21, 'percent': 50.5}

astuple()

এই ফাংশন ক্লাস ইনস্ট্যান্সকে একটি টাপল অবজেক্টে রূপান্তর করে।

>>> dataclasses.astuple(s2)
('Mahesh', 20, 50.0)

make_dataclass()

এই ফাংশন fields আর্গুমেন্ট হিসেবে দেওয়া টাপলের তালিকা থেকে একটি নতুন ডেটা ক্লাস তৈরি করে।

>>> NewClass = dataclasses.make_dataclass('NewClass', [('x', int), ('y', float)])
>>> n = NewClass(10, 20)
>>> n
NewClass(x=10, y=20)
  1. পাইথনে ক্লাস এবং অবজেক্ট: বেগাইনারদের জন্য

  2. পাইথন JSON

  3. পাইথনে dir() মেথডের ব্যবহার

  4. পাইথনে Pandas .query() মেথড দিয়ে ডেটা ফিল্টার করা