import inspect
def register(func):
sig = inspect.signature(func)
print(func.__name__, list(sig.parameters))
return func
@register
def enroll(name, age=18):
...
# enroll ['name', 'age'] — دکوراتور موقع تعریف، امضا را خواند
نقشهٔ ابزار: type نوعِ دقیق، isinstance عضویت در خانواده (با ارثبری)، hasattr/getattr دسترسیِ پویا با نامِ رشتهای، dir فهرستِ نامها، inspect.signature امضا، vars() دیکشنریِ ویژگیهای نمونه. قانون احتیاط: پویاییِ زیاد، خوانایی را میخورد — بازتاب برای ابزار و چارچوب است، نه برای منطقِ عادیِ برنامه.
اشتباه رایج
کدِ بازتابی چون هوشمندانه است، همیشه بهتر است.
تصحیح
کدِ صریحِ ساده تقریباً همیشه برنده است. بازتاب را برای جایی نگه دار که واقعاً نامها را از قبل نمیدانی (پلاگین، ابزار، دیباگر).