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

পাইথন ক্লাস ব্রাউজার সাপোর্ট (pyclbr মডিউল)


পাইথন লাইব্রেরির pyclbr মডিউল একটি পাইথন মডিউলে সংজ্ঞায়িত ফাংশন, ক্লাস এবং মেথড সম্পর্কে তথ্য বের করে। তথ্যগুলো পাইথন সোর্স কোড থেকে বের করা হয়, মডিউল ইম্পোর্ট করে না।

এই মডিউল readmodule() ফাংশন ডিফাইন করে যা মডিউল-লেভেল ক্লাস নামকে ক্লাস ডেসক্রিপ্টরের সাথে ম্যাপ করে একটি ডিকশনারি রিটার্ন করে। ফাংশনটি একটি মডিউল নাম প্যারামিটার হিসেবে নেয়। এটি একটি প্যাকেজের ভিতরের মডিউল নামও হতে পারে। সেক্ষেত্রে পাথ হলো ডিরেক্টরি পাথের একটি সিকোয়েন্স যা sys.path-এর সাথে প্রিপেন্ড করা থাকে, যা মডিউল সোর্স কোড লোকেট করতে ব্যবহৃত হয়।

নিচের কোডটি readmodule() ফাংশন ব্যবহার করে পাইথন লাইব্রেরির socket মডিউলের ক্লাস এবং মেথডগুলো পার্স করে।

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 <pyclbr.Class object at 0x000002095D7D0048> IntFlag <pyclbr.Class object at 0x000002095D7D04E0> _intenum_converter <pyclbr.Function object at 0x000002095D82F940> _GiveupOnSendfile <pyclbr.Class object at 0x000002095D822898> socket <pyclbr.Class object at 0x000002095D8227B8> fromfd <pyclbr.Function object at 0x000002095D8340B8> fromshare <pyclbr.Function object at 0x000002095D82FEF0> socketpair <pyclbr.Function object at 0x000002095D834128> SocketIO <pyclbr.Class object at 0x000002095D82FA20> getfqdn <pyclbr.Function object at 0x000002095D8344E0> create_connection <pyclbr.Function object at 0x000002095D834518> getaddrinfo <pyclbr.Function object at 0x000002095D834550>

এই ফাংশনগুলো কাস্টম মডিউলসহ ব্যবহার করে ইউজার-ডিফাইন ক্লাস এবং মেথডের ডিরেক্টরি পাওয়া যায়।

নিচের উদাহরণে '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 মডিউল দুটি অবজেক্ট ডিফাইন করে - Class অবজেক্ট এবং Function অবজেক্ট।

Function অবজেক্টের নিচের অ্যাট্রিবিউটগুলো রয়েছে:

file ফাংশন সংজ্ঞায়িত ফাইলের নাম।
module ফাংশন সংজ্ঞায়িত করার মডিউলের নাম।
name ফাংশনের নাম।
lineno ফাইলে সংজ্ঞা শুরু হয়েছে সেই লাইন নম্বর।
parent টপ-লেভেল ফাংশনের জন্য None। নেস্টেড ফাংশনের জন্য পেরেন্ট।
children নেস্টেড ফাংশন এবং ক্লাসের ডেসক্রিপ্টরের সাথে নাম ম্যাপ করার ডিকশনারি।

Class অবজেক্টের উপরের موارد বèside দুটি অতিরিক্ত অ্যাট্রিবিউট রয়েছে:

super বর্ণনা করা ক্লাসের তাত্ক্ষণিক বেস ক্লাসগুলোর বর্ণনাকারী Class অবজেক্টের তালিকা।
methods মেথড নামকে লাইন নম্বরের সাথে ম্যাপ করার ডিকশনারি।

  1. পাইথনে ইনহেরিটেন্স (Inheritance)

  2. পাইথনে ক্লাস মেথড বনাম স্ট্যাটিক মেথড

  3. পাইথনে ফার্স্ট-ক্লাস ফাংশন (First Class Functions)

  4. পাইথন এক্সসেপশন বেস ক্লাসসমূহ (Exception Base Classes)