編集:失敗した実際のコードは次のとおりです。
サウンド.py
import audio
import time
localAudioPlayer = None
def Play(soundString, wait=True):
if (localAudioPlayer != None):
localAudioPlayer.stop()
localAudioPlayer = audio.stream("sound/%s.ogg" % soundString)
localAudioPlayer.play()
if (wait == True):
while (localAudioPlayer.playing == True):
time.sleep(0.1)
return
「オーディオ」は、オーディオ再生を可能にする完全なライブラリです ( initのあるフォルダーに)。
ここでの考え方は、サウンドが既に再生されているときに Play() が呼び出された場合、そのサウンドを停止する必要があるということです。
実際に再生するファイルがなくても audio.stream() オブジェクトをインスタンス化できるようにコードをセットアップしていないため、事前に初期化することはあまり良い考えではありません。
元の例で同様のコードを試しました (stuffLocalVar = None を設定し、関数で None に対してテストしました) が、正常に機能しました。したがって、これはこの特定のコードに固有のものです。
Python コンソールで「サウンドのインポート」を行い、Play() を直接実行しようとすると、同じトレースバックが発生しました。
トレースバック:
>>> sounds2.Play("file.ogg")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "sounds2.py", line 7, in Play
if (localAudioPlayer != None):
UnboundLocalError: local variable 'localAudioPlayer' referenced before assignment
オリジナル
このセットアップの適切な用語がわからないので、短い例を挙げましょう。
mainApp.py:
import stuff
print stuff.do() # should print 16
stuff.stuffLocalVar = 8
print stuff.do() # should print 32
スタッフ.py
stuffLocalVar = 4
def do():
return stuffLocalVar * 4
これは可能ですか?stuff.py(これは質問のポイントを強調するために非常に単純化されています)には、ユーザーが複数のクラスをインスタンス化できないようにしたくないコードが含まれているため、これを行いたいです。アプリ全体で、このコードの「インスタンス」が 1 つだけ必要です。しかし、stuff.py の関数は、コードのそのセクション内に保持されているデータに依存します。