میخواهیم کلاسی در زبان پایتون طراحی کنیم که عملکرد یک پروکسی را برای اشیائی که نمایندهٔ آنان است داشته باشد. دقت کنید که این کلاس باید قادر باشد تمامی توابعی را که روی شی اصلی فراخوانی میشود، بدون تغییر کارکرد روی آنان اجرا کند. توجه کنید که این شئ میتواند از هر نوع کلاسی باشد.
برای مثال اگر کد زیر را برای کلاس Radio
داشته باشیم:
سپس اگر یک پروکسی از شئ از کلاس Radio
بسازیم
تمامی توابع بالا باید بر روی radio_proxy
قابل فراخوانی باشد:
اگر تابع فراخوانیشده، جزو توابع تعریفشده برای شئ هدف نباشد، باید استثنایی با پیام No Such Method
پرتاب شود.
همچنین کلاس Proxy
که باید توابع آن را پیادهسازی کنید، باید قادر باشد اطلاعاتی را نیز ذخیرهسازی کند. توابع و ویژگیهایی که این کلاس باید دارا باشد به شرح زیر است.
last_invoked_method
نام آخرین متد معتبر فراخوانی شده بر روی شئ هدف را بازمیگرداند و نوع خروجی آن باید رشته باشد. در صورتی که تا لحظهٔ فراخوانی این تابع، متدی روی شئ فراخوانی نشده بود، استثنایی با پیام No Method Is Invoked
پرتاب میشود.
count_of_calls
میبایست به ازای نام متد ورودی، تعداد دفعاتی که این متد بر روی شئ فراخوانی شده را بازگرداند. اگر متد ورودی معتبر نباشد، مقدار 0
را برمیگرداند.
was_called
به ازای نام متد معتبر ورودیَ، یک Boolean
را به عنوان خروجی برمیگرداند که اگر آن متد برروی شئ فراخوانی شده باشد مقدار True
و در غیر این صورت مقدار False
را برمیگرداند. اگر متد ورودی معتبر نباشد مقدار False
را برمیگرداند.
در نهایت توجه کنید که در صورتی که ویژگیها و متدهایی به شئ هدف، پس از ساختن پروکسی اضافه شوند، شئ پروکسی باید قادر به مدیریت توابع و ویژگیهای جدید نیز باشد.
شما باید کلاس Proxy
موجود در فایل proxy.py
را تکمیل و سپس این فایل را ارسال کنید.