উত্তর:
বলা হয় অন্তর্নির্মিত ফাংশন getattr
এবংsetattr
getattr(object, attrname)
setattr(object, attrname, value)
এক্ষেত্রে
x = getattr(t, 'attr1')
setattr(t, 'attr1', 21)
df1
, এবং ভেরিয়েবল x = 'df1'
অর্থাৎ df1 ভার্জ x এর স্ট্রিং হিসাবে। আমি df এর মতো আকারটি প্রিন্ট করতে চাই, getattr(x, 'shape')
বা getattr('df1', 'shape')
। আমি জানি গ্যাটট্রা, অন্য কোনও পদ্ধতিতে এটি করা যায় না।
new
মডিউল ছিল 2008 সালে অবচিত ।ফাংশনস সেটেট্র এবং গেটআটারে অজগরটি নির্মিত। যা শ্রেণীর বৈশিষ্ট্য নির্ধারণ এবং পেতে ব্যবহার করতে পারে।
সংক্ষিপ্ত উদাহরণ:
>>> from new import classobj
>>> obj = classobj('Test', (object,), {'attr1': int, 'attr2': int}) # Just created a class
>>> setattr(obj, 'attr1', 10)
>>> setattr(obj, 'attr2', 20)
>>> getattr(obj, 'attr1')
10
>>> getattr(obj, 'attr2')
20
আপনি যদি ক্লাসের ভিতরে লজিকটি গোপন রাখতে চান তবে আপনি সাধারণ জেটর পদ্ধতিটি এর মতো ব্যবহার করতে পছন্দ করতে পারেন:
class Test:
def __init__(self):
self.attr1 = 1
self.attr2 = 2
def get(self,varname):
return getattr(self,varname)
t = Test()
x = "attr1"
print ("Attribute value of {0} is {1}".format(x, t.get(x)))
আউটপুট:
Attribute value of attr1 is 1
এটি আরও ভালভাবে আড়াল করতে পারে এমন আরেকটি অ্যাপোচারটি যাদু পদ্ধতিটি ব্যবহার করা হবে __getattribute__
, তবে আমি একটি অন্তহীন লুপ পেতে থাকি যা সেই পদ্ধতির অভ্যন্তরে গুণাবলীটি পুনরুদ্ধার করার চেষ্টা করার সময় আমি সমাধান করতে পারি না।
এছাড়াও লক্ষ করুন যে আপনি বিকল্পভাবে ব্যবহার করতে পারেন vars()
। উপরের উদাহরণে, আপনি বিনিময় হতে পারে getattr(self,varname)
দ্বারা return vars(self)[varname]
, কিন্তু getattr
উত্তর অনুযায়ী বাঞ্ছনীয় হতে পারে কি মধ্যে পার্থক্য vars
এবং setattr
? ।