답변:
getattr(object, attrname)
setattr(object, attrname, value)
이 경우
x = getattr(t, 'attr1')
setattr(t, 'attr1', 21)
df1
변수 x = 'df1'
ie df1을 가지고 있다고 말합니다 . 나는이 같은 DF의 모양을 인쇄 할, getattr(x, 'shape')
또는 getattr('df1', 'shape')
. getattr, 다른 방법으로는이 작업을 수행 할 수 없다는 것을 알고 있습니다.
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
에 대한 대답에 따라 바람직 할 수 사이의 차이가 무엇 vars
과 setattr
? .