পাইথনে সব কিছু অবজেক্ট
পাইথনে সব কিছু (সংখ্যা, স্ট্রিং, লিস্ট, ফাংশন, ক্লাস, মডিউল) অবজেক্ট। সব ক্লাস হলো type ক্লাসের ইন্সট্যান্স। type অবজেক্টও নিজে type ক্লাসের ইন্সট্যান্স।
type() ফাংশন ব্যবহার
সিঙ্গল আর্গুমেন্ট: অবজেক্টের টাইপ জানা
a = 5
b = 5.2
c = 'hello'
A = [1, 4, 7]
B = {'k1': 'Sun', 'K2': 'Mon', 'K3': 'Tue'}
C = ('Sky', 'Blue', 'Vast')
print(type(a)) #
print(type(b)) #
print(type(c)) #
print(type(A)) #
print(type(B)) #
print(type(C)) #
ট্রিপল আর্গুমেন্ট: ডাইনামিক ক্লাস তৈরি
type(name, bases, dict) দিয়ে রানটাইমে নতুন ক্লাস তৈরি করা যায়।
# বেস ক্লাস object, অ্যাট্রিবিউট a='Hello', b=5
Object1 = type('A', (object,), dict(a='Hello', b=5))
print(type(Object1)) #
print(vars(Object1)) # {'a': 'Hello', 'b': 5, '__module__': '__main__', ...}
# ইনহেরিটেন্স সহ ক্লাস তৈরি
class NewClass:
a = 'Good day!'
b = 7
Object2 = type('B', (NewClass,), dict(a='Hello', b=5))
print(type(Object2)) #
print(vars(Object2)) # {'a': 'Hello', 'b': 5, '__module__': '__main__', '__doc__': None}
ক্লাসের টাইপ: সব ক্লাস হলো type-এর ইন্সট্যান্স
print(type(int)) #
print(type(dict)) #
print(type(list)) #
print(type(type)) # (মেটা-সার্কুলার)
ইনহেরিটেন্স হায়ারার্কি: __bases__ অ্যাট্রিবিউট
class Base: pass
class Derived(Base): pass
print(Derived.__bases__) # (,)
print(int.__bases__) # (,)
print(type.__bases__) # (,)
মেটাক্লাস (Metaclass) সংক্ষিপ্ত ধারণা
type হলো ডিফল্ট মেটাক্লাস। কাস্টম মেটাক্লাস বানিয়ে ক্লাস_CREATION_ কাস্টমাইজ করা যায় (যেমন সিংলটন, অটো-রেজিস্টারেশন, ভ্যালিডেশন)।
class Meta(type):
def __new__(mcs, name, bases, namespace):
print(f"Creating class: {name}")
return super().__new__(mcs, name, bases, namespace)
class MyClass(metaclass=Meta):
pass
# আউটপুট: Creating class: MyClass
সারসংক্ষেপ: type(obj) → অবজেক্টের ক্লাস। type(name, bases, dict) → নতুন ক্লাস তৈরি। type হলো সব ক্লাসের ক্লাস (মেটাক্লাস)।