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

পাইথন কোড অবজেক্ট (Code Objects) - CPython ইন্টারনালস

কোড অবজেক্ট কি?

কোড অবজেক্ট (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_stacksizeVM স্ট্যাক সাইজ

উদাহরণ: অ্যাট্রিবিউটস এক্সপ্লোর

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)।

  1. পাইথনে ফাইল অবজেক্ট: ফাইল পড়া, লিখা এবং ম্যানেজমেন্টের সম্পূর্ণ গাইড

  2. পাইথন ক্লাস অবজেক্ট কীভাবে ইনহেরিট করে?

  3. পাইথনে TimeTuple কী?

  4. পাইথন অবজেক্ট থেকে সোর্স কোড রিট্রিভ করা