এই মডিউলের ফাংশনগুলো লাইভ অবজেক্ট যেমন মডিউল, ক্লাস, মেথড, ফাংশন, কোড অবজেক্ট ইত্যাদি সম্পর্কে উপযোগী তথ্য প্রদান করে। এই ফাংশনগুলো টাইপ চেকিং, সোর্স কোড রিট্রিভ, ক্লাস ও ফাংশন ইন্সপেক্ট, এবং ইন্টারপ্রেটার স্ট্যাক পরীক্ষা করে।
- getmembers(): একটি অবজেক্টের সকল মেম্বার নাম-ভ্যালু পেয়ারের লিস্ট হিসেবে রিটার্ন করে, নাম অনুযায়ী সোর্টেড। ঐচ্ছিক predicate দেওয়া থাকলে শুধু সেগুলো রিটার্ন করে যার জন্য predicate true রিটার্ন করে।
- getmodulename(): ফাইল পথ দ্বারা নামকৃত মডিউলের নাম রিটার্ন করে, এনক্লোজিং প্যাকেজের নাম ছাড়া।
নিচের স্ক্রিপ্ট দিয়ে inspect মডিউল বুঝব:
# inspect-example.py
'''This is module docstring'''
def hello():
'''hello docstring'''
print('Hello world')
return
# ক্লাস ডেফিনিশন
class parent:
'''parent docstring'''
def __init__(self):
self.var = 'hello'
def hello(self):
print(self.var)
class child(parent):
def hello(self):
'''hello function overridden'''
super().hello()
print("How are you?")
'__' দিয়ে শুরু হওয়া মেম্বারগুলো বাদ দিয়ে প্রিন্ট:
>>> import inspect, inspect_example
>>> for k,v in inspect.getmembers(inspect_example):
... if k.startswith('__') == False: print(k, v)
child
hello
parent
প্রেডিকেট (Predicates)
প্রেডিকেট হলো inspect মডিউলের ফাংশনগুলোর সাথে লজিক্যাল কন্ডিশন। উদাহরণস্বরূপ getmembers() ফাংশন মডিউলের মেম্বারদের লিস্ট রিটার্ন করে যাদের জন্য দেওয়া প্রেডিকেট কন্ডিশন true। inspect মডিউলে নিচের প্রেডিকেটগুলো ডিফাইন করা আছে:
| প্রেডিকেট | বিবরণ |
|---|---|
| ismodule() | অবজেক্ট মডিউল হলে True রিটার্ন করে। |
| isclass() | অবজেক্ট ক্লাস হলে (বিল্ট-ইন বা পাইথন কোডে তৈরি) True রিটার্ন করে। |
| ismethod() | অবজেক্ট পাইথনে লেখা বাউন্ড মেথড হলে True রিটার্ন করে। |
| isfunction() | অবজেক্ট পাইথন ফাংশন হলে (ল্যাম্বডা এক্সপ্রেশন দিয়ে তৈরি ফাংশন সহ) True রিটার্ন করে। |
| isgenerator() | অবজেক্ট জেনারেটর হলে True রিটার্ন করে। |
| iscode() | অবজেক্ট কোড হলে True রিটার্ন করে। |
| isbuiltin() | অবজেক্ট বিল্ট-ইন ফাংশন বা বাউন্ড বিল্ট-ইন মেথড হলে True রিটার্ন করে। |
| isabstract() | অবজেক্ট অ্যাবস্ট্রাক্ট বেস ক্লাস হলে True রিটার্ন করে। |
শুধু মডিউলের ক্লাস মেম্বারগুলো পেতে:
>>> for k,v in inspect.getmembers(inspect_example, inspect.isclass):
... print(k, v)
child
parent
নির্দিষ্ট ক্লাস 'child'-এর মেম্বার পেতে:
>>> inspect.getmembers(inspect_example.child)
>>> x = inspect_example.child()
>>> inspect.getmembers(x)
getdoc() ফাংশন মডিউল, ক্লাস বা ফাংশনের ডকস্ট্রিং রিট্রিভ করে:
>>> inspect.getdoc(inspect_example)
'This is module docstring'
>>> inspect.getdoc(inspect_example.parent)
'parent docstring'
>>> inspect.getdoc(inspect_example.hello)
'hello docstring'
getsource() ফাংশন ফাংশনের ডেফিনিশন কোড ফেচ করে:
>>> print(inspect.getsource(inspect_example.hello))
def hello():
'''hello docstring'''
print('Hello world')
return
>>> sign = inspect.signature(inspect_example.parent.hello)
>>> print(sign)
inspect মডিউলের কমান্ড লাইন ইন্টারফেসও রয়েছে:
C:\Users\acer>python -m inspect -d inspect_example
Target: inspect_example
Origin: C:\python36\inspect_example.py
Cached: C:\python36\__pycache__\inspect_example.cpython-36.pyc
Loader: <_frozen_importlib_external.SourceFileLoader object at 0x0000029827BD0D30>
নিচের কমান্ড মডিউলের 'hello()' ফাংশনের সোর্স কোড রিটার্ন করে:
C:\Users\acer>python -m inspect inspect_example:hello
def hello():
'''hello docstring'''
print('Hello world')
return