programing

해당 속성의 이름에 해당하는 문자열이 지정된 개체 속성에 액세스(가져오기 또는 설정)하는 방법

css3 2023. 7. 9. 12:34

해당 속성의 이름에 해당하는 문자열이 지정된 개체 속성에 액세스(가져오기 또는 설정)하는 방법

의 속성 값을 설정/취득하는 방법t에 의해 주어진x?

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

t = Test()
x = "attr1"

라고 하는 내장 함수가 있습니다.

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

이 경우

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

논리를 클래스 내부에 숨겨두려면 다음과 같은 일반화된 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

그것을 훨씬 더 잘 숨길 수 있는 또 다른 접근법은 마법의 방법을 사용하는 것입니다.__getattribute__하지만 그 메소드 내에서 속성 값을 검색하려고 할 때 해결할 수 없는 무한 루프가 계속 발생했습니다.

또한 사용할 수도 있습니다.vars()위의 예에서, 당신은 교환할 수 있습니다.getattr(self,varname)타고return vars(self)[varname],그렇지만getattr와의 차이는 무엇인가에 대한 답에 따라 더 선호될 수 있습니다.

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

함수 setatr과 getatr에 python이 내장되어 있습니다.클래스의 속성을 설정하고 가져오는 데 사용할 수 있습니다.

간단한 예:

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

언급URL : https://stackoverflow.com/questions/2612610/how-to-access-get-or-set-object-attribute-given-string-corresponding-to-name-o