1

私はテキストベースのアドベンチャーゲームに取り組んでいます。私がやりたいことの 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()

それを機能させるか、彼が提案するようにインポートplayerPrefsします。className

于 2013-06-16T21:40:35.887 に答える
0

createNewメソッドはselfパラメーターを受け取るため、インスタンス メソッドです。呼び出すには、クラスのインスタンスが必要です。この問題を解決するには、次の 2 つの方法があります。

  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 に答える
0

試す

from className import *

また

from className import playerPrefs
于 2013-06-16T21:32:28.760 に答える