2012-10-21 2 views
1

.txt 파일에서 텍스트를 읽으며 클래스 인스턴스의 변수로 읽은 데이터 중 하나를 사용해야합니다.Python 3 : 문자열을 변수로 변환

class Sports: 
     def __init__(self,players=0,location='',name=''): 
      self.players = players 
      self.location = location 
      self.name = name 
     def __str__(self): 
      return str(self.name) + "is played with " + str(self.players) + " players per team on a/an " + self.location + "." 

    def makeList(filename): 
     """ 
     filename -- string 
     """ 
     sportsList = [] 
     myInputFile = open(filename,'r') 
     for line in myInputFile: 
      record = myInputFile.readline() 
      datalist = record.split() 
      sportsList.append(datalist[0]) 
      datalist[0] = Sports(int(datalist[1]),datalist[2],datalist[3])   
     myInputFile.close() 
     print(football.players) 

    makeList('num7.txt') 

나는 변환 할 필요가 DataList에 [0], 변수 이름 문자열 (기본적으로 따옴표없이) 그래서 그 이름의 인스턴스를 생성하는 데 사용할 수있다.

+2

이것이 당신을 어떻게 생각하십니까? 나중에 인스턴스를 참조하려면 hacky dereferencing을 도입해야하거나 어쨌든 사전처럼 작동하도록 인스턴스를 일부 구조에 저장해야합니다. 그리고 그 경우 왜 "이름"을 키로 사용하는 사전을 사용하지 않는 것이 좋을까요? – DSM

+0

또 다른 문제는 이미 사용중인 라인이있을 때 readline()을 호출하는 것입니다. 이로 인해 레코드를 건너 뜁니다. – Keith

+0

위험한 것 - 동적 변수 이름. 왜 그냥 사전을 쓰지 않는거야? – volcano

답변

1

시작하기 전에 변수를 만드는 것은 매우 나쁜 (잠재적으로 위험한) 코딩 방법이라고해야합니다. 순전히 잘못 될 수 있으며 자연스럽게 만드는 이름을 잊어 버리는 것은 매우 쉽습니다. 또한, 그와 같은 코드는 유지하기가 끔찍합니다.

>>> a="b" 
>>> exec(a+"=1") 
>>> print(b) 
1 
>>> 

그래서, 당신의 코드에서, 당신은 할 수 :

그러나, 일단 당신이 문자열에서 변수를 만들어야합니다 파란 달 시나리오를 위해, 당신은 이런 식으로 뭔가를 할 수 있습니다 무엇인가 :

exec(datalist[0]+"= Sports(int(datalist[1]),datalist[2],datalist[3])") 

다시 한번 말하지만, 이것은 99 %의 시간 동안 사용하면 안되는 매우 해킹 된 해결책입니다. 하지만, 1 %의 완전히 비정상적인 시나리오를 위해, 나는 수 있다는 것을 보여주고 싶었어요.