পাইথনের অবজেক্টগুলিতে বৈশিষ্ট্য থাকতে পারে - ডেটা অ্যাট্রিবিউট এবং সেগুলি (পদ্ধতি) এর সাথে কাজ করার জন্য ফাংশন। আসলে, প্রতিটি বস্তুর অন্তর্নির্মিত বৈশিষ্ট্য রয়েছে।
উদাহরণস্বরূপ, আপনি একটি বস্তু আছে person
, যে বিভিন্ন বৈশিষ্ট্য আছে: name
, gender
, ইত্যাদি
আপনি অ্যাক্সেস এই বৈশিষ্ট্যাবলী (এটা পদ্ধতি বা ডেটা বস্তু হতে) সাধারণত লিখছি: person.name
, person.gender
, person.the_method()
, ইত্যাদি
তবে আপনি প্রোগ্রামটি লেখার সময় যদি অ্যাট্রিবিটির নামটি না জানেন? উদাহরণস্বরূপ, আপনার নামে পরিচিত একটি ভেরিয়েবলের মধ্যে অ্যাট্রিবিউটরটির নাম সঞ্চয় রয়েছে attr_name
।
যদি
attr_name = 'gender'
তারপরে, লেখার পরিবর্তে
gender = person.gender
তুমি লিখতে পারো
gender = getattr(person, attr_name)
কিছু অনুশীলন:
Python 3.4.0 (default, Apr 11 2014, 13:05:11)
>>> class Person():
... name = 'Victor'
... def say(self, what):
... print(self.name, what)
...
>>> getattr(Person, 'name')
'Victor'
>>> attr_name = 'name'
>>> person = Person()
>>> getattr(person, attr_name)
'Victor'
>>> getattr(person, 'say')('Hello')
Victor Hello
getattr
AttributeError
প্রদত্ত নামের সাথে অ্যাট্রিবিউট অবজেক্টে উপস্থিত না থাকলে উত্থাপন করবে :
>>> getattr(person, 'age')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Person' object has no attribute 'age'
তবে আপনি তৃতীয় আর্গুমেন্ট হিসাবে একটি ডিফল্ট মান পাস করতে পারেন, যা যদি এমন বৈশিষ্ট্য উপস্থিত না থাকে তবে ফিরে আসবে:
>>> getattr(person, 'age', 0)
0
আপনি সমস্ত বৈশিষ্ট্যের নামগুলির getattr
সাথে dir
পুনরাবৃত্তি করতে এবং তাদের মানগুলি পেতে ব্যবহার করতে পারেন :
>>> dir(1000)
['__abs__', '__add__', ..., '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
>>> obj = 1000
>>> for attr_name in dir(obj):
... attr_value = getattr(obj, attr_name)
... print(attr_name, attr_value, callable(attr_value))
...
__abs__ <method-wrapper '__abs__' of int object at 0x7f4e927c2f90> True
...
bit_length <built-in method bit_length of int object at 0x7f4e927c2f90> True
...
>>> getattr(1000, 'bit_length')()
10
এর ব্যবহারিক ব্যবহার হ'ল যার নামগুলি দিয়ে শুরু হয় test
এবং সেগুলি কল করে এমন সমস্ত পদ্ধতি সন্ধান করা ।
getattr
সেখানে অনুরূপ setattr
যা আপনাকে তার নামযুক্ত কোনও বস্তুর একটি বৈশিষ্ট্য নির্ধারণ করতে দেয়:
>>> setattr(person, 'name', 'Andrew')
>>> person.name # accessing instance attribute
'Andrew'
>>> Person.name # accessing class attribute
'Victor'
>>>