آموزش ماژول inspect پایتون

January 2022

ماژول inspect به بررسی آبجکت‌های موجود در کدی که نوشته ایم کمک می کند. از آنجایی که پایتون یک زبان شی گرا است و تمام کدهایی که نوشته می شود اساساً یک تعامل بین این آبجکت‌ها است، بنابراین ماژول inspect در بررسی ماژول های خاص یا آبجکت‌های خاص بسیار مفید است.

 

ماژول inspect متدهای زیادی را ارائه می‌دهد، این متدها را می‌توان به دو دسته طبقه‌بندی کرد: متدهایی برای تأیید نوع آبجکت و متدهایی برای بازیابی اطلاعات آبجکت. متداول ترین متدهای مورد استفاده هر دو دسته در زیر ذکر شده است.

 

دوره پیشنهادی: دوره آموزش رایگان پایتون (python)

 

 #  متدهایی برای تایید نوع آبجکت

 

 +  متد isclass پایتون

متد isclass یک آبجکت را گرفته و اگر آن آبجکت یک کلاس باشد مقدار True و در غیر اینصورت مقدار False را برمیگرداند:

import inspect
  
class A(object):
    pass

print(inspect.isclass(A)) # True

 

 

 +  متد ismodule پایتون

اگر آبجکتی که به این متد ارسال میکنید یک ماژول باشد، مقدار True و در غیر اینصورت مقدار False را برمیگرداند:

import inspect
import numpy
  
print(inspect.ismodule(numpy)) # True

 

 

 +  متد isfunction پایتون

اگر آبجکتی که به این متد ارسال میکنید یک فانکشن باشد، مقدار True و در غیر اینصورت مقدار False را برمیگرداند:

import inspect
  
def fun(a):
    return 2*a

print(inspect.isfunction(fun)) # True

 

 

 +  متد ismethod پایتون

اگر آبجکتی که به این متد ارسال میکنید یک متد باشد، مقدار True و در غیر اینصورت مقدار False را برمیگرداند:

import inspect

class A:
    def show(self):
        pass

print(inspect.ismethod( A().show )) # True

 

 

 #  متدهایی برای بازیابی اطلاعات آبجکت

 

 +  متد getclasstree پایتون

متد getclasstree به دریافت و بررسی سلسله مراتب کلاس کمک می کند. یک تاپل از آن کلاس و کلاس های پایه قبلی آن را برمی گرداند. ترکیب با متد getmro() که کلاس های پایه را برمی گرداند به درک سلسله مراتب کلاس کمک می کند.

 

مثال اول:

import inspect
  
class A(object):
    pass
  
class B(A):
    pass
  
class C(B):
    pass

print(inspect.getmro(C))

# OUTPUT
(<class ‘__main__.C’>, <class ‘__main__.B’>, <class ‘__main__.A’>, <class ‘object’>)

 

 

مثال دوم:

import inspect
  
class A(object):
    pass
  
class B(A):
    pass
  
class C(B):
    pass
  
for i in (inspect.getclasstree(inspect.getmro(C))):
    print(i)

# OUTPUT
(<class ‘object’>, ()) [(<class ‘__main__.A’>, (<class ‘object’>,)), [(<class ‘__main__.B’>, (<class ‘__main__.A’>,)), [(<class ‘__main__.C’>, (<class ‘__main__.B’>,))]]]

 

 

 +  متد getmembers پایتون

این متد تمام اعضای یک ماژول را برمیگرداند:

import inspect
import math

print(inspect.getmembers(math))

# OUTPUT
    [(‘__doc__’, ‘This module provides access to the mathematical functions\ndefined by the C standard.’), (‘__loader__’, <class ‘_frozen_importlib.BuiltinImporter’>), (‘__name__’, ‘math’), (‘__package__’, ”), (‘__spec__’, ModuleSpec(name=’math’, loader=<class ‘_frozen_importlib.BuiltinImporter’>, origin=’built-in’)), (‘acos’, <built-in function acos>), (‘acosh’, <built-in function acosh>), (‘asin’, <built-in function asin>), (‘asinh’, <built-in function asinh>), (‘atan’, <built-in function atan>), (‘atan2’, <built-in function atan2>), (‘atanh’, <built-in function atanh>), (‘ceil’, <built-in function ceil>), (‘copysign’, <built-in function copysign>), (‘cos’, <built-in function cos>), (‘cosh’, <built-in function cosh>), (‘degrees’, <built-in function degrees>), (‘e’, 2.718281828459045), (‘erf’, <built-in function erf>), (‘erfc’, <built-in function erfc>), (‘exp’, <built-in function exp>), (‘expm1’, <built-in function expm1>), (‘fabs’, <built-in function fabs>), (‘factorial’, <built-in function factorial>), (‘floor’, <built-in function floor>), (‘fmod’, <built-in function fmod>), (‘frexp’, <built-in function frexp>), (‘fsum’, <built-in function fsum>), (‘gamma’, <built-in function gamma>), (‘gcd’, <built-in function gcd>), (‘hypot’, <built-in function hypot>), (‘inf’, inf), (‘isclose’, <built-in function isclose>), (‘isfinite’, <built-in function isfinite>), (‘isinf’, <built-in function isinf>), (‘isnan’, <built-in function isnan>), (‘ldexp’, <built-in function ldexp>), (‘lgamma’, <built-in function lgamma>), (‘log’, <built-in function log>), (‘log10’, <built-in function log10>), (‘log1p’, <built-in function log1p>), (‘log2’, <built-in function log2>), (‘modf’, <built-in function modf>), (‘nan’, nan), (‘pi’, 3.141592653589793), (‘pow’, <built-in function pow>), (‘radians’, <built-in function radians>), (‘remainder’, <built-in function remainder>), (‘sin’, <built-in function sin>), (‘sinh’, <built-in function sinh>), (‘sqrt’, <built-in function sqrt>), (‘tan’, <built-in function tan>), (‘tanh’, <built-in function tanh>), (‘tau’, 6.283185307179586), (‘trunc’, <built-in function trunc>)]

 

 

 +  متد getsource پایتون

این متد سورس کد یک ماژول، کلاس، متد یا تابعی را که به عنوان آرگومان به متد getsource ارسال کرده‌اید را برمی گرداند:

import inspect
  
def fun(a,b):
    return a*b
  
print(inspect.getsource(fun))

# OUTPUT
def fun(a,b):
    return a*b

 

 

 +  متد getmodule پایتون

این متد اطلاعات یک ماژول را برمیگرداند:

import inspect
import collections
  
print(inspect.getmodule(collections))

# OUTPUT
<module ‘collections’ from ‘D:\\Software\\Anaconda\\lib\\collections\\__init__.py’>

 

 

 +  متد getdoc پایتون

این متد مستندات یک آبجکت را برمیگرداند:

import inspect
from tkinter import *
  
root = Tk()

print(inspect.getdoc(root))

# OUTPUT
Toplevel widget of Tk which represents mostly the main window
of an application. It has an associated Tcl interpreter.

 

ارسال نظر

تلاش میکنم سوالات شما را در کمتر از یک روز پاسخ بدم

emad

January 2022

استاد حجت رو تموم کردی یعنی
خیلی خیلی ممنون
- bound و unbound

پاسخ به نظر