জাতির চেয়ে পাইথনের প্রতিচ্ছবি অনেক সহজ এবং অনেক বেশি নমনীয়।
আমি এই টিউটোরিয়ালটি পড়ার পরামর্শ দিচ্ছি
কোনও প্রত্যক্ষ ক্রিয়াকলাপ নেই (যা আমি জানি) যা পুরোপুরি যোগ্যতাসম্পন্ন শ্রেণীর নাম নেয় এবং ক্লাসটি ফিরিয়ে দেয়, তবে এটি তৈরি করার জন্য আপনার প্রয়োজনীয় সমস্ত টুকরা রয়েছে এবং আপনি সেগুলি একসাথে সংযুক্ত করতে পারেন।
যদিও এক বিট পরামর্শ: আপনি যখন অজগরে থাকবেন তখন জাভা স্টাইলে প্রোগ্রাম করার চেষ্টা করবেন না।
আপনি যদি এটি করার চেষ্টা করছেন তা যদি আপনি ব্যাখ্যা করতে পারেন তবে সম্ভবত আমরা আপনাকে এটি করার আরও অজগর উপায় খুঁজে পেতে সহায়তা করতে পারি।
এখানে একটি ফাংশন যা আপনি যা চান তা করে:
def get_class( kls ):
parts = kls.split('.')
module = ".".join(parts[:-1])
m = __import__( module )
for comp in parts[1:]:
m = getattr(m, comp)
return m
আপনি এই ফাংশনটির রিটার্ন মানটি ব্যবহার করতে পারেন যেমন এটি বর্গ নিজেই।
এখানে একটি ব্যবহার উদাহরণ:
>>> D = get_class("datetime.datetime")
>>> D
<type 'datetime.datetime'>
>>> D.now()
datetime.datetime(2009, 1, 17, 2, 15, 58, 883000)
>>> a = D( 2010, 4, 22 )
>>> a
datetime.datetime(2010, 4, 22, 0, 0)
>>>
ওটা কিভাবে কাজ করে?
আমরা __import__
ক্লাসটি ধারণ করে এমন মডিউলটি আমদানি করতে ব্যবহার করছি , যার জন্য প্রয়োজন ছিল আমরা প্রথমে সম্পূর্ণরূপে যোগ্যতাসম্পন্ন নাম থেকে মডিউলটির নাম বের করব। তারপরে আমরা মডিউলটি আমদানি করব:
m = __import__( module )
এই ক্ষেত্রে, m
কেবলমাত্র শীর্ষ স্তরের মডিউলটি উল্লেখ করা হবে,
উদাহরণস্বরূপ, যদি আপনার শ্রেণি foo.baz
মডিউলে বাস করে m
তবে মডিউলটি foo
আমরা সহজেই foo.baz
ব্যবহারের জন্য একটি রেফারেন্স পেতে পারি obtaingetattr( m, 'baz' )
শীর্ষ স্তরের মডিউল থেকে ক্লাসে পেতে, gettatr
ক্লাস নামের অংশগুলিতে পুনরাবৃত্তভাবে ব্যবহার করতে হবে
উদাহরণস্বরূপ বলুন, যদি আপনার শ্রেণির নাম হয় foo.baz.bar.Model
তবে আমরা এটি করি:
m = __import__( "foo.baz.bar" )
m = getattr( m, "baz" )
m = getattr( m, "bar" )
m = getattr( m, "Model" )
এই লুপে যা ঘটছে তা হচ্ছে:
for comp in parts[1:]:
m = getattr(m, comp)
লুপ শেষে m
ক্লাসে একটি রেফারেন্স হবে। এর অর্থ m
হ'ল এটি আসলে শ্রেণীর নিজের স্তর, উদাহরণস্বরূপ আপনি এটি করতে পারেন:
a = m() #instantiate a new instance of the class
b = m( arg1, arg2 ) # pass arguments to the constructor
importlib.import
, যা অজগর 3 থেকে 2.7 থেকে ব্যাকপোর্ট করা হয়েছিল ( docs.python.org/2/library/importlib.html )