无法从另一个文件构造一个类

时间:2014-05-12 04:53:50

标签: python-2.7 canopy

以下是我的两个文件:

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' 

我想知道这段代码是怎么回事,我导入错误的方法吗?

1 个答案:

答案 0 :(得分:2)

您的导入没有问题。你确定两次跑步都在同一个地方吗?由于您的代码只指定了没有路径的文件名,因此您的python会话需要在Sample.dat文件所在的目录中运行。我问这个问题的原因是因为你在__init__的中间定义了一个stats属性,唯一可能发生的事情就是不存在它是为了调用它上面的return None 。只有当文件不存在时才会发生这种情况(意味着它不存在于其所在的位置,这是您运行的位置)。

P.S。在python:

  • 行尾不需要分号
  • if声明
  • 中的条件不需要括号
  • 课程应来自objectclass Character(object):
  • 文档字符串(您在方法名称上方的三引号中放置的字符串)应位于方法名称的正下方。当用户在他们面前放置一个问号时,这将允许ipython和其他工具接收它们并显示它们。
相关问题