1

我正在开发基于文本的冒险游戏。我想做的一件事是使用类构建游戏,将主数据类放在一个单独的文件中,然后将调用所有类和函数的实际主循环放在一个单独的文件中。到目前为止,这就是我在调用主类文件时的主循环

import time
import sys
import pickle
import className

playerPrefs.createNew()

这是我运行程序时受影响的主类文件中的代码部分。

class playerPrefs(object):
# This line will create a function to create a new player name
def createNew(self):
    print "Welcome to Flight of Doom Character Creation Screen."
    time.sleep(2)
    print "Please type your first and last Name, spaced in between, at the prompt"
    time.sleep(2)

当我尝试从我的主游戏文件运行 createNew 函数时,我的问题就出现了。如您所见,我导入了 className,它是其中包含类的文件的名称。该文件位于我的主游戏文件所在的同一位置。我怀疑它可能与构造函数有关,但我不确定。如果你们能帮助我,我将不胜感激。

顺便说一句,这不是试图让你们回答我的问题的策略:) 我只想说这个网站和这里的编程向导已经救了我很多次。感谢大家参与这个社区项目。

4

3 回答 3

1

您已将其定义playerPrefs()为实例方法,而不是类方法(因为它具有self作为其第一个参数)。因此,您需要在调用它之前创建一个实例,例如:

p = playerPrefs()
p.createNew()

此外,您编写的代码根本不应该运行,因为您没有缩进createNew(), 而您需要缩进的定义。

正如 Vedran 所说,要么使用:

p = className.playerPrefs()

使其工作,或按照他的建议导入playerPrefsclassName

于 2013-06-16T21:40:35.887 回答
0

尝试

from className import *

或者

from className import playerPrefs
于 2013-06-16T21:32:28.760 回答
0

因为您的createNew方法需要一个self参数,所以它是一个实例方法。它需要您的类的实例才能被调用。现在有两种方法可以解决这个问题:

  1. 创建一个类的实例:

    playerPrefs().createNew()
    
  2. 使该方法成为静态方法:

    class playerPrefs(object):
        @staticmethod
        def createNew():
            print "Welcome to Flight of Doom Character Creation Screen."
            time.sleep(2)
            print "Please type your first and last Name, spaced in between, at the prompt"
            time.sleep(2)
    

考虑到您的结构,这些似乎都不合适,因为据我所知,整个班级似乎有点没用。

于 2013-06-16T21:41:50.813 回答