파이썬의 객체는 속성 (데이터 속성 및 그와 함께 작동하는 함수)을 가질 수 있습니다. 실제로 모든 객체에는 내장 속성이 있습니다.
예를 들어 객체를 가지고 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'
>>>