繁体   English   中英

从原始文件之外的类导入函数

[英]Importing functions from classes outside original file

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

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,它是其中包含类的文件的名称。 该文件位于我的主游戏文件所在的位置。 我怀疑它可能与构造函数有关,但我不确定。 如果你们能帮助我,我将非常感谢。

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

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

p = playerPrefs()
p.createNew()

另外,编写的代码根本不应该运行,因为您尚未缩进createNew()的定义,因此需createNew()

正如Vedran所说,请使用:

p = className.playerPrefs()

使其起作用,或按照他的建议从className导入playerPrefs

尝试

from className import *

要么

from className import playerPrefs

因为您的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) 

考虑到您的结构,这两种方法在这里似乎都不适当,因为根据我的判断,整个班级似乎都没有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM