Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ตรวจสอบวัตถุที่มีชีวิตใน Python


ฟังก์ชันในโมดูลนี้ให้ข้อมูลที่เป็นประโยชน์เกี่ยวกับอ็อบเจ็กต์ที่ใช้งานอยู่ เช่น โมดูล คลาส เมธอด ฟังก์ชัน อ็อบเจกต์โค้ด ฯลฯ ฟังก์ชันเหล่านี้ดำเนินการตรวจสอบประเภท เรียกซอร์สโค้ด ตรวจสอบคลาสและฟังก์ชัน และตรวจสอบสแต็กของตัวแปล

getmembers()− ฟังก์ชันนี้ส่งคืนสมาชิกทั้งหมดของอ็อบเจ็กต์ในรายการชื่อ คู่ค่าเรียงตามชื่อ หากระบุเพรดิเคตทางเลือก จะรวมเฉพาะสมาชิกที่เพรดิเคตคืนค่าจริงเท่านั้นที่จะถูกรวม getmodulename() ฟังก์ชันนี้จะคืนค่าชื่อของโมดูลที่ตั้งชื่อตามพาธของไฟล์ โดยไม่รวมถึงชื่อของแพ็คเกจที่ล้อมรอบ

เราจะใช้สคริปต์ต่อไปนี้เพื่อทำความเข้าใจพฤติกรรมของโมดูลการตรวจสอบ

#inspect-example.py'''This is module docstring'''def hello():'''hello docstring''' print ('Hello world') return#class definitionsclass parent:'''parent docstring' ''' def __init__ (ตัวเอง):self.var='hello' def สวัสดี (ตัวเอง):พิมพ์ (self.var) ลูกคลาส (แม่):def สวัสดี (ตัวเอง):'' 'ฟังก์ชันสวัสดีถูกแทนที่''' ซุปเปอร์ ().hello() พิมพ์ ("สบายดีไหม?")

ขึ้นต้นด้วย '__'

>>> นำเข้าตรวจสอบ, inspect_example>>> สำหรับ k,v ในการตรวจสอบ.getmembers(inspect_example):ถ้า k.startswith('__')==False:print (k,v)childhelloparent>>> 

ภาคแสดง

เพรดิเคตเป็นเงื่อนไขตรรกะที่ใช้กับฟังก์ชันในโมดูลการตรวจสอบ ตัวอย่างเช่น ฟังก์ชัน getmembers() จะคืนค่ารายการสมาชิกของโมดูลที่เงื่อนไขเพรดิเคตให้ไว้เป็นจริง เพรดิเคตต่อไปนี้ถูกกำหนดในโมดูลการตรวจสอบ

ismodule() คืนค่า จริง หากวัตถุเป็นโมดูล
isclass() คืนค่า จริง หากอ็อบเจ็กต์เป็นคลาส ไม่ว่าจะสร้างขึ้นในหรือสร้างด้วยโค้ด Python
ismethod() คืนค่า จริง หากวัตถุเป็นเมธอดที่ถูกผูกไว้ซึ่งเขียนด้วยภาษา Python
isfunction() คืนค่า จริง หากวัตถุนั้นเป็นฟังก์ชัน Python ซึ่งรวมถึงฟังก์ชันที่สร้างโดยนิพจน์แลมบ์ดา
isgenerator() คืนค่า จริง หากวัตถุเป็นตัวสร้าง
iscode() คืนค่า จริง หากวัตถุเป็นรหัส
isbuiltin() คืนค่า จริง หากอ็อบเจ็กต์เป็นฟังก์ชันในตัวหรือเมธอดในตัวที่ถูกผูกไว้
isabstract() คืนค่า จริง หากวัตถุเป็นคลาสพื้นฐานที่เป็นนามธรรม

ที่นี่จะส่งกลับเฉพาะสมาชิกชั้นเรียนในโมดูลเท่านั้น

>>> สำหรับ k,v ใน inspect.getmembers(inspect_example, inspect.isclass):print (k,v)child parent >>>

ในการดึงสมาชิกของคลาส 'ลูก' ที่ระบุ -

>>> inspect.getmembers(inspect_example.child)>>> x=inspect_example.child()>>> inspect.getmembers(x)

ฟังก์ชัน getdoc() ดึง docstring ของโมดูล คลาส หรือฟังก์ชัน

>>> inspect.getdoc(inspect_example)'This is module docstring'>>> inspect.getdoc(inspect_example.parent)'parent docstring'>>>check.getdoc(inspect_example.hello)'hello docstring'

ก่อน>

ฟังก์ชัน getsource() ดึงโค้ดคำจำกัดความของฟังก์ชัน -

>>>> พิมพ์ (inspect.getsource(inspect_example.hello))def สวัสดี ():'''hello docstring''' พิมพ์ ('สวัสดีชาวโลก') return>>> sign=inspect.signature(inspect_example.parent .hello)>>> พิมพ์ (ลงชื่อ)

โมดูลตรวจสอบยังมีอินเทอร์เฟซบรรทัดคำสั่ง

C:\Users\acer>python -m inspect -d inspect_exampleTarget:inspect_exampleOrigin:C:\python36\inspect_example.pyCached:C:\python36\__pycache__\inspect_example.cpython-36.pycLoader:C:\python36\__pycache__\inspect_example.cpython-36.pycLoader:<_frozenx0_imalLoader:>

คำสั่งต่อไปนี้จะคืนค่าซอร์สโค้ดของฟังก์ชัน 'Hello()' ในโมดูล

C:\Users\acer>python -m inspect inspect_example:hellodef hello():'''hello docstring''' print ('Hello world') return