কোড অবজেক্ট কি?
কোড অবজেক্ট (Code Object) হলো CPython ইন্টারপ্রেটারের একটি লো-লেভেল ডেটা স্ট্রাকচার যা কম্পাইল করা পাইথন কোডের এক্সিকিউটেবল বাইটকোড এবং মেটাডেটা ধারণ করে। এটি নিজে থেকে ডায়রেক্ট কলেবল (Callable) নয়, এক্সিকিউট করতে exec() বা eval() লাগে।
কোড অবজেক্ট তৈরি: compile() ফাংশন
code_str = """
print("Hello Code Objects")
"""
# কম্পাইল করুন: source, filename, mode ('exec', 'eval', 'single')
code_obj = compile(code_str, '', 'exec')
print("Code Object:", code_obj)
print("Type:", type(code_obj))
কোড অবজেক্টের গুরুত্বপূর্ণ অ্যাট্রিবিউটস
| অ্যাট্রিবিউট | বিবরণ |
|---|---|
co_code | র কর বাইটকোড (bytes) |
co_consts | কনস্ট্যান্টস টাপল (স্ট্রিং, সংখ্যা, নেস্টেড কোড অবজেক্ট) |
co_varnames | লোকাল ভেরিয়েবল নামের টাপল |
co_names | গ্লোবাল নামের টাপল (ফাংশন, মডিউল নাম) |
co_filename | সোর্স ফাইল নাম |
co_firstlineno | প্রথম লাইন নম্বর |
co_argcount | পজিশনাল আর্গুমেন্ট সংখ্যা |
co_flags | ফ্ল্যাগস (জেনারেটর, ভারআর্গস ইত্যাদি) |
co_stacksize | VM স্ট্যাক সাইজ |
উদাহরণ: অ্যাট্রিবিউটস এক্সপ্লোর
code_str = "x = 10\ny = 20\nz = x + y\nprint(z)"
code_obj = compile(code_str, '', 'exec')
print("Filename:", code_obj.co_filename)
print("First Line:", code_obj.co_firstlineno)
print("Bytecode (hex):", code_obj.co_code.hex())
print("Constants:", code_obj.co_consts)
print("Var Names:", code_obj.co_varnames)
print("Names:", code_obj.co_names)
print("Arg Count:", code_obj.co_argcount)
print("Stack Size:", code_obj.co_stacksize)
আউটপুট (আংশিক)
Filename:
First Line: 1
Bytecode (hex): 6400640117006402640317007c0064005300...
Constants: (None, 10, 20, 'z')
Var Names: ('x', 'y', 'z')
Names: ('print',)
Arg Count: 0
Stack Size: 2
কোড অবজেক্ট এক্সিকিউট করা
exec(code_obj)
# আউটপুট: 30
ব্যবহার ক্ষেত্রে
- ডাইনামিক কোড জেনারেশন / মেটা-প্রোগ্রামিং।
- কম্পাইলার / ইন্টারপ্রেটার লেখা।
- ডিবাগার, প্রোফাইলার, কভারেজ টুলস।
disমডিউল দিয়ে বাইটকোড ডিসঅ্যাসেম্বলি।
সতর্কতা: কোড অবজেক্ট ম্যানিপুলেশন অ্যাডভান্সড টপিক, সাধারণ ডেভেলপমেন্টে কম লাগে। নিরাপত্তা রিস্ক থাকতে পারে (untrusted code exec)।