[python] 해당 속성의 이름에 해당하는 문자열이 주어진 객체 속성에 액세스하는 방법

t의해 주어진 속성 값을 어떻게 설정 / 얻 x습니까?

class Test:
   def __init__(self):
       self.attr1 = 1
       self.attr2 = 2

t = Test()
x = "attr1"



답변

내장 함수가 getattr있으며setattr

getattr(object, attrname)
setattr(object, attrname, value)

이 경우

x = getattr(t, 'attr1')
setattr(t, 'attr1', 21)


답변

참고 :이 답변은 매우 구식입니다. 2008 년new더 이상 사용되지 않는 모듈을 사용하여 Python 2에 적용됩니다 .

파이썬에는 setattr 및 getattr 함수가 내장되어 있습니다. 클래스의 속성을 설정하고 얻는 데 사용할 수 있습니다.

간단한 예 :

>>> 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


답변

클래스 내부에 로직을 숨기려면 다음과 같이 일반화 된 getter 메소드를 사용하는 것이 좋습니다.

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

더 잘 숨길 수있는 또 다른 접근 방식은 magic 메소드를 사용하는 __getattribute__것이지만 그 메소드 내에서 속성 값을 검색하려고 할 때 해결할 수없는 끝없는 루프를 계속 얻었습니다.

또한을 사용할 수도 있습니다 vars(). 위의 예에서, 당신은 교환 수 getattr(self,varname)에 의해 return vars(self)[varname],하지만 getattr에 대한 대답에 따라 바람직 할 수 사이의 차이가 무엇 varssetattr? .


답변