Python लाइब्रेरी में pyclbr मॉड्यूल Python मॉड्यूल में परिभाषित फ़ंक्शन, क्लास, और मेथड के बारे में जानकारी निकालता है। जानकारी Python स्रोत कोड से निकाली जाती है न कि मॉड्यूल को आयात करके।
यह मॉड्यूल readmodule() फ़ंक्शन को परिभाषित करता है जो मॉड्यूल-स्तरीय क्लास नामों को क्लास डिस्क्रिप्टर से मैप करने वाला डिक्शनरी लौटाता है। फ़ंक्शन एक मॉड्यूल नाम को पैरामीटर के रूप में लेता है। यह एक पैकेज के भीतर एक मॉड्यूल का नाम हो सकता है। उस स्थिति में पथ डायरेक्टरी पथ का एक क्रम है जिसे sys.path में प्रीपेंड किया जाता है, जिसका उपयोग मॉड्यूल स्रोत कोड का पता लगाने के लिए किया जाता है।
निम्नलिखित कोड Python लाइब्रेरी के socket मॉड्यूल में क्लास और मेथड को पार्स करने के लिए readmodule() फ़ंक्शन का उपयोग करता है।
import pyclbr
mod = pyclbr.readmodule("socket")
def show(c):
s = "class " + c.name
print(s + ":")
methods = c.methods.items()
for method, lineno in methods:
print(" def " + method)
print()
for k, v in mod.items():
show(v)
class IntEnum:
class IntFlag:
def _missing_
def _create_pseudo_member_
def __or__
def __and__
def __xor__
def __invert__
class _GiveupOnSendfile:
class socket:
def __init__
def __enter__
def __exit__
def __repr__
def __getstate__
def dup
def accept
def makefile
def _sendfile_use_sendfile
def _sendfile_use_send
def _check_sendfile_params
def sendfile
def _decref_socketios
def _real_close
def close
def detach
def family
def type
def get_inheritable
def set_inheritable
class SocketIO:
def __init__
def readinto
def write
def readable
def writable
def seekable
def fileno
def name
def mode
def close
pyclbr मॉड्यूल readmodule_ex() फ़ंक्शन को भी परिभाषित करता है जो मॉड्यूल में परिभाषित प्रत्येक फ़ंक्शन और क्लास के लिए फ़ंक्शन या क्लास डिस्क्रिप्टर वाला डिक्शनरी लौटाता है। लौटाया गया डिक्शनरी मॉड्यूल-स्तरीय फ़ंक्शन और क्लास नामों को उनके डिस्क्रिप्टर से मैप करता है। नेस्टेड ऑब्जेक्ट को उनके पैरेंट के चिल्ड्रन डिक्शनरी में दर्ज किया जाता है।
>>> x = pyclbr.readmodule_ex('socket')
>>> for k, v in x.items(): print(k, v)
IntEnum
IntFlag
_intenum_converter
_GiveupOnSendfile
socket
fromfd
fromshare
socketpair
SocketIO
getfqdn
create_connection
getaddrinfo
इन फ़ंक्शन का उपयोग कस्टम मॉड्यूल के साथ भी किया जा सकता है ताकि उपयोगकर्ता-परिभाषित क्लास और मेथड की डायरेक्टरी प्राप्त की जा सके।
निम्नलिखित उदाहरण में एक मॉड्यूल 'triangles.py' का उपयोग इसकी क्लास संरचना प्राप्त करने के लिए किया जाता है।
# triangles.py
import math
class Triangle:
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
def area(self):
s = (self.a + self.b + self.c) / 2
area = math.sqrt(s * (s - self.a) * (s - self.b) * (s - self.c))
return area
class EquiTriangle(Triangle):
def __init__(self, a):
b = a
c = a
super().__init__(a, b, c)
def area(self):
area = math.sqrt(3) * pow(self.a, 2) / 4
return area
अब हम 'triangles' मॉड्यूल में क्लास और मेथड प्राप्त करेंगे।
>>> br = pyclbr.readmodule_ex('triangles')
>>> for i, j in br.items(): print(i, j.methods)
Triangle {'__init__': 3, 'area': 7}
EquiTriangle {'__init__': 12, 'area': 16}
pyclbr मॉड्यूल दो ऑब्जेक्ट परिभाषित करता है - क्लास ऑब्जेक्ट और फ़ंक्शन ऑब्जेक्ट।
फ़ंक्शन ऑब्जेक्ट में निम्नलिखित विशेषताएं हैं
| file | फ़ाइल का नाम जिसमें फ़ंक्शन परिभाषित है। |
| module | फ़ंक्शन को परिभाषित करने वाले मॉड्यूल का नाम। |
| name | फ़ंक्शन का नाम। |
| lineno | फ़ाइल में वह लाइन नंबर जहां परिभाषा शुरू होती है। |
| parent | टॉप-लेवल फ़ंक्शन के लिए, None। नेस्टेड फ़ंक्शन के लिए, पैरेंट। |
| children | नेस्टेड फ़ंक्शन और क्लास के लिए नाम से डिस्क्रिप्टर मैप करने वाला डिक्शनरी। |
क्लास ऑब्जेक्ट में उपरोक्त के अलावा दो और विशेषताएं हैं
| super | क्लास ऑब्जेक्ट की सूची जो वर्णित क्लास के तत्काल बेस क्लास का वर्णन करती है। |
| methods | मेथड नामों को लाइन नंबरों से मैप करने वाला डिक्शनरी। |