কম্পিউটার

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


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

ডেটাক্লাস ডেকোরেটরের নিম্নলিখিত স্বাক্ষর রয়েছে

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

সমস্ত আর্গুমেন্ট একটি বুলিয়ান মান নেয় যা নির্দেশ করে যে একটি সংশ্লিষ্ট জাদু পদ্ধতি বা পদ্ধতিগুলি স্বয়ংক্রিয়ভাবে তৈরি হবে কি না৷

'init' যুক্তিটি ডিফল্টরূপে সত্য। এটি ক্লাসের জন্য স্বয়ংক্রিয়ভাবে __init__() পদ্ধতি তৈরি করবে।

ডাটাক্লাস ডেকোরেটর ব্যবহার করে স্টুডেন্ট ক্লাসকে নিম্নরূপ সংজ্ঞায়িত করা যাক

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 প্যারামিটার উপেক্ষা করা হয়।

রিপ্র আর্গুমেন্ট ডিফল্টরূপেও সত্য। তাই __repr__() পদ্ধতি স্বয়ংক্রিয়ভাবে তৈরি হবে। __repr__() বস্তুর একটি আনুষ্ঠানিক স্ট্রিং উপস্থাপনা। যদি ক্লাসটি ইতিমধ্যেই __repr__() সংজ্ঞায়িত করে, তাহলে এই প্যারামিটারটি উপেক্ষা করা হবে।

eq যুক্তিটি ডিফল্টভাবে সত্য। এটি স্বয়ংক্রিয়ভাবে __eq__() পদ্ধতি তৈরি করবে। সমান তুলনা অপারেটর (==) এর প্রতিক্রিয়া হিসাবে এই পদ্ধতিটি বলা হয়। আবার, যদি ক্লাসটি ইতিমধ্যেই __eq__() সংজ্ঞায়িত করে, তাহলে এই প্যারামিটারটি উপেক্ষা করা হবে।

যদি 'অর্ডার' প্যারামিটারটি সত্য হয় (ডিফল্টটি মিথ্যা), তুলনা করার জন্য জাদু পদ্ধতি, __lt__(), __le__(), __gt__(), এবং __ge__() পদ্ধতিগুলি স্বয়ংক্রিয়ভাবে তৈরি হবে, তারা তুলনা অপারেটরগুলি প্রয়োগ করে <<=> উত্তর>=যথাক্রমে। যদি ক্রম সত্য হয় এবং eq মিথ্যা হয়, একটি ValueError উত্থাপিত হয়। যদি ক্লাসটি ইতিমধ্যেই এই পদ্ধতিগুলির মধ্যে কোনটি সংজ্ঞায়িত করে তবে এটি TypeError-এ পরিণত হয়৷

অসুরক্ষিত_হ্যাশ আর্গুমেন্ট যদি মিথ্যা (ডিফল্ট), eq এবং হিমায়িত কিভাবে সেট করা হয় সে অনুযায়ী একটি __hash__() পদ্ধতি তৈরি করা হয়।

হিমায়িত যুক্তি:সত্য হলে (ডিফল্টটি মিথ্যা), শুধুমাত্র পঠনযোগ্য হিমায়িত দৃষ্টান্ত অনুকরণ করে।

>>> from data_class 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}

চমৎকার()

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

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

make_dataclass()

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

>>> 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. Python - পান্ডাস .query() পদ্ধতির সাহায্যে ডেটা ফিল্টার করা