2014-05-12 5 views
0

내 두 개의 파일이있는 다른 파일에서 클래스를 구성 할 수 없습니다다음은

Character.py

def Check_File(fn): 
    try: 
     fp = open(fn); 
    except: 
     return None; 
    return fp; 


class Character: 

    ## variables ## 
    ## atk ## 
    ## def ## 
    ## HP ## 
    ## empty inv ## 


    ''' 
    init (self, filename), 

    RETURN -1 == if the file is not exist 
    RETURN 0 == all good 

    all files will be save in format of 

    "skill: xxx, xxx; xxx, xxx; xxx, xxx;" 

    ''' 
    def __init__(self, fn): 
     fp = Check_File(fn); 
     if(fp == None): 
      print "Error: no such file" 
      return None; 
     self.stats = {}; 
     for line in fp: 
      nline = line.strip().split(": "); 
      if(type(nline) != list): 
       continue; 
      else: 
       self.stats[nline[0]] = nline[1]; 
       ##print self.stats[nline[0]] 
     fp.close(); 


    ''' 
    display character 
    ''' 
    def Display_Character(self): 

     print "The Character had:"; 
     ## Parse into the character class ## 
     for item in self.stats: 

      print item + ": " + self.stats[item]; 

     print "Finished Stats Displaying"; 


print Character("Sample.dat").stats 

또 다른 하나는 다음과 같습니다

Interface.py

##from Interface_helper import *; 
from Character import *; 

wind = Character("Sample.dat"); 


wind.Display_Character(); 

Character.py에서 코드를 실행하면

%run "C:/Users/Desktop/Helper Functions/New Folder/Character.py" 
{'item': 'weird stuff', 'hp': '100', 'name': 'wind', 'def': '10', 'atk': '10'} 

하지만 Interface.py 실행하면 내가 길을 잘못 가져 않았다

가 나는 코드의이 작품을 위해 무슨 일이 일어나고 있는지 궁금

%run "C:/Users/Desktop/Helper Functions/New Folder/Interface.py" 
--------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 
E:\canopy\Canopy\App\appdata\canopy-1.4.0.1938.win-x86_64\lib\site-packages\IPython\utils\py3compat.pyc in execfile(fname, glob, loc) 
    195    else: 
    196     filename = fname 
--> 197    exec compile(scripttext, filename, 'exec') in glob, loc 
    198  else: 
    199   def execfile(fname, *where): 

C:\Users\Desktop\Helper Functions\New Folder\Interface.py in <module>() 
    13 from Character import *; 
    14 
---> 15 wind = Character("Sample.dat"); 
    16 
    17 

C:\Users\Desktop\Helper Functions\New Folder\Character.py in __init__(self, fn) 
    48   for line in fp: 
    49    nline = line.strip().split(": "); 
---> 50    if(type(nline) != list): 
    51     continue; 
    52    else: 

AttributeError: Character instance has no attribute 'stats' 

을 가지고 있습니까?

답변

2

아니요 가져 오기에 문제가 없습니다. 두 곳 모두 같은 위치에 있다고 확신합니까? 코드는 경로가없는 파일 이름을 지정하기 때문에 파이썬 세션은 Sample.dat 파일이있는 디렉토리에서 실행해야합니다. 내가 이것을 묻는 이유는 __init__의 중간에 stats 속성을 정의했기 때문이며, 존재하지 않기 위해 일어날 수있는 유일한 일은 위의 return None이 호출되기 때문입니다. 파일이 존재하지 않는 경우에만 발생합니다. 즉, 파일이 보이지 않는 곳 (즉, 실행중인 곳)에 존재하지 않습니다.

P. 파이썬 :

은 세미콜론이
  • 괄호가 if 문에서 조건 주위에 필요하지 않은 라인의 끝에서 필요하지 않은
    • 클래스 object에서 파생한다 : class Character(object):
    • 문서화 문자열 (문자열을 메서드 이름 위에 트리플 따옴표를 넣는다.) 메서드 이름 바로 아래에 있어야한다. 그러면 ipython 및 다른 도구가 사용자가 물음표를 앞에 붙이면 해당 도구를 선택하여 표시 할 수 있습니다.
  • +0

    늦게 답변을 드려 죄송합니다. 매우 도움이됩니다. 다시 확인하겠습니다. 고맙습니다. 처음 두 가지는 세미콜론과 괄호에 대한 나의 개인적인 취향입니다. 마지막 두 가지는 정말 도움이됩니다. 다시 한번 감사드립니다. – windsound

    +0

    나는 다시 도망 쳤다, 그것은 작동한다. 그것은 매우 이상하다 ... – windsound