প্লাগইন সিস্টেমে অন্যরকম দৃষ্টিভঙ্গি হিসাবে আপনি এক্সটেন্ড মি প্রকল্পটি পরীক্ষা করতে পারেন ।
উদাহরণস্বরূপ, আসুন সহজ শ্রেণি এবং এর প্রসারকে সংজ্ঞায়িত করি
# Define base class for extensions (mount point)
class MyCoolClass(Extensible):
my_attr_1 = 25
def my_method1(self, arg1):
print('Hello, %s' % arg1)
# Define extension, which implements some aditional logic
# or modifies existing logic of base class (MyCoolClass)
# Also any extension class maby be placed in any module You like,
# It just needs to be imported at start of app
class MyCoolClassExtension1(MyCoolClass):
def my_method1(self, arg1):
super(MyCoolClassExtension1, self).my_method1(arg1.upper())
def my_method2(self, arg1):
print("Good by, %s" % arg1)
এবং এটি ব্যবহার করার চেষ্টা করুন:
>>> my_cool_obj = MyCoolClass()
>>> print(my_cool_obj.my_attr_1)
25
>>> my_cool_obj.my_method1('World')
Hello, WORLD
>>> my_cool_obj.my_method2('World')
Good by, World
এবং দৃশ্যের পিছনে কী লুকিয়ে আছে তা দেখান:
>>> my_cool_obj.__class__.__bases__
[MyCoolClassExtension1, MyCoolClass]
extend_me metaclasses মাধ্যমে গ্রন্থাগার নিপূণভাবে ব্যবহার করেন বর্গ সৃষ্টি প্রক্রিয়া, এইভাবে উদাহরণে উপরে, নতুন দৃষ্টান্ত তৈরি যখন MyCoolClass
আমরা নতুন ক্লাসের নিদর্শনের সঙ্গে উভয়ের উপশ্রেণী যে পেয়েছিলাম MyCoolClassExtension
এবং MyCoolClass
পাইথন এর উভয়ের থাকার কার্যকারিতা, ধন্যবাদ একাধিক উত্তরাধিকার
শ্রেণি তৈরির উপর আরও ভাল নিয়ন্ত্রণের জন্য এই লিবিতে সংজ্ঞায়িত কয়েকটি মেটাচ্লাস রয়েছে:
ExtensibleType
- সাবক্লাসিং করে সহজ এক্সটেনসিবিলিটি অনুমতি দেয়
ExtensibleByHashType
- এক্সটেনসিবল টাইপের অনুরূপ, তবে ক্লাসের বিশেষায়িত সংস্করণ তৈরি করার ক্ষমতা রয়েছে, বেস ক্লাসের বিশ্বব্যাপী সম্প্রসারণ এবং শ্রেণীর বিশেষ সংস্করণগুলির বর্ধনের অনুমতি দেওয়া হচ্ছে
এই lib ওপেনারপিপি প্রক্সি প্রকল্পে ব্যবহৃত হয় এবং মনে হয় যথেষ্ট ভাল কাজ করছে!
ব্যবহারের বাস্তব উদাহরণের জন্য, ওপেনআরপি প্রক্সি 'ফিল্ড_ডেটটাইম' এক্সটেনশানটিতে দেখুন :
from ..orm.record import Record
import datetime
class RecordDateTime(Record):
""" Provides auto conversion of datetime fields from
string got from server to comparable datetime objects
"""
def _get_field(self, ftype, name):
res = super(RecordDateTime, self)._get_field(ftype, name)
if res and ftype == 'date':
return datetime.datetime.strptime(res, '%Y-%m-%d').date()
elif res and ftype == 'datetime':
return datetime.datetime.strptime(res, '%Y-%m-%d %H:%M:%S')
return res
Record
এখানে অস্তিত্বযোগ্য বস্তু। RecordDateTime
এক্সটেনশন হয়।
এক্সটেনশন সক্ষম করতে, কেবল এক্সটেনশান ক্লাসযুক্ত মডিউল আমদানি করুন এবং Record
এরপরে তৈরি সমস্ত অবজেক্টের বেস শ্রেণিতে এক্সটেনশন ক্লাস থাকবে, এইভাবে এর সমস্ত কার্যকারিতা থাকবে।
এই লাইব্রেরির প্রধান সুবিধাটি হ'ল, এমন কোড যা এক্সটেনসিবল অবজেক্টগুলি পরিচালনা করে, এক্সটেনশান এবং এক্সটেনশন সম্পর্কে জানতে হবে না যা এক্সটেনসিবল অবজেক্টগুলিতে সমস্ত কিছু পরিবর্তন করতে পারে।