从原始fi之外的类导入函数

2024-06-28 20:01:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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,它是包含类的文件名。该文件位于我的主游戏文件所在的位置。我怀疑这可能与构造器有关,但我不确定。如果你们能帮我,我将非常感激。你知道吗

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


Tags: 文件to函数文本import游戏timecreate
3条回答

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

从你的结构来看,这两个似乎都不合适,因为从我的角度来看,整个班级似乎有点无用。你知道吗

试试看

from className import *

或者

from className import playerPrefs

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

p = playerPrefs()
p.createNew()

另外,您编写的代码根本不应该运行,因为您还没有缩进createNew()的定义,您需要这样做。你知道吗

正如韦德兰所说,要么使用:

p = className.playerPrefs()

为了让它工作,或者像他建议的那样从className导入playerPrefs。你知道吗

相关问题 更多 >