2017-12-10 4 views
0

런타임 중에 클래스 내의 특정 목록에 변수를 바인딩하려고합니다. 아래의 스 니펫은 작동하지만 변수 대신 eval 표현식에 클래스 이름을 지정하고 싶습니다. 즉 동등한 : 분명히 작동하지 않습니다 ...하지만 함께 "foo는 '와'mybin '를 붙입니다하려고 다양한 화신 후 구문을 알아낼 수 없습니다런타임시 특정 클래스 변수를 대상으로하는 python eval

mybin = 'bin2' 
eval(foo.mybin) 

.

class A: 
    bin1 = [3,6,9] 
    bin2 = [12,14,25] 

foo = A() 

mybin = 'foo.bin2' 

for bin in eval(mybin): 
    print bin 

출력 :

12 
14 
25 

답변

1

사용하지 마십시오 eval. 동적 속성 액세스의 경우, 파이썬은 getattr 알고 :

mybin = 'bin2' 
for bin in getattr(foo, mybin): 
    print bin 
+0

위험이! 나는 python에 익숙하지 않고 전에 getattr을 뛰어 넘지 못했습니다. 팁 고마워! –

0

어쩌면 f-string 당신이 좋아있을 것입니다 : 기타/오래된 언어 프로그래밍 습관의

class A(): 
    bin1 = [1, 2] 
    bin2 = [12, 14, 25] 

foo = A() 

my_bin = 'bin2' 

print(eval(f'foo.{my_bin}')) 
#[12, 14, 25] 
관련 문제