2014-12-01 2 views
0

문자열 이름을 변수 이름으로 사용하는 것은 가능하지 않습니다. 나는 기본적으로 프로그램이 인용 부호 안에있는 것이 내가 참조하기를 원하는 객체의 이름이라는 것을 이해하기를 원한다. 다음과 같이하고 싶습니다.문자열을 파이썬에서 변수로 형변환

str = "modname" 

import var(str) 

var()는 허구의 기능입니다. str() 또는 int()를 사용하는 방식으로 사용하고 있습니다. "왜?"라고 물을지도 모른다.

class player: 
    __init___(): 
     attributes = [ "hp", "attack", "defense" ] 
     for x in range(0, len(self.attributes) ]: 
      self.var(attributes[x]) = var(attributes[x] + "()") 

(이미 from stats import * 같은 것을했던 가정) :이 같은 뭔가를 할 수 있도록이다. 그러나 실제 보상은 다음과 같이 할 수있는 능력입니다.

for x in range(0, len(self.attributes)): 
    self.var(attributes[x]).modAttr(-5) 
    print self.var(attributes[x]).magnitude 

이게 가능합니까? 이 일을하고 싶다는 것이 완전히 터무니 없는가? 아니면 다른 작업을 수행하는 데 더 많은 방법이 있습니까?

+0

의 중복 가능성 [동적 while 루프를 통해 파이썬에서 변수를 만들 수 있습니까?] (http://stackoverflow.com/questions/5036700/how-can-you-dynamically-create-variables-in -python-via-a-while-loop) : dict 사용 – fredtantini

+0

약간 도움이 될 것 같지만'attributes = { 'hp': hp, 'attack'과 같은 사전을 만드는 것은 어리석은 일이 아닙니다. 공격}'take_off_the_quote_marks ('hp')'라고 말할 수있는 방법이 있어야 할 때? (나는 이것이 중복 된 것으로 생각하지 않는다.) –

+0

* "이것이 가능합니까?"* 예, getattr과 setattr이 그 것이다. * "이 일을하고 싶다면 완전히 불합리한가?" 정확하게, 당신이하려고하는 것이 명확하지 않습니다. 당신의'player .__ init__'는'NameError'를 포함하고 있으며, 속성에 자신을 호출하려고 시도하는 것처럼 보입니다. 또한 인덱스 x를 왜 귀찮게합니까? 'attr 속성 :'은 훨씬 더 읽기 쉽습니다. – jonrsharpe

답변

0

답변을 찾았습니다. 이 같은 것을 기반으로합니다.

class whatever: 
    list_of_modules = [ "one", "two", "three" ] 
    for l in list_of_modules: 
     exec ("self.attr_%s = %s()" % (l, l)) 
관련 문제