![](/img/trans.png)
[英]Using single elastic search connection object across multiple python files?
[英]Loading an object across multiple files
我正在用 Python 制作游戲,我有一個對象來存儲所有用戶的偏好,稱為gameSettings
。
在單獨的文件 ( functions.py
) 中運行函數時,我必須在文件中的每個函數中創建一個新的本地gameSettings
var。
# functions.py
def myFunc1(x, y, gameSettings):
if gameSettings.printX == True:
print(x)
def myFunc2(z, gameSettings):
if gameSettings.printZ == True:
print(z)
def myFunc3(a, b, gameSettings):
if gameSettings.add == True:
print(a+b)
elif gameSettings.subtract == True:
print(a-b)
# (example code)
這也意味着我必須通過迄今為止我編寫的幾乎所有函數來運行gameSettings
對象。
我想知道是否有更好的方法來做到這一點,因為我懷疑這是否非常有效。 我不能只在啟動時導入gameSettings
對象(因為這會導致循環導入),但即使我可以用戶修改對象的變量,我的猜測是更改main.py
中的gameSettings
對象不會更改其functions.py
對應項。
您如何看待這個解決方案? 使用共享字典。 根據我的經驗,我會將該設置存儲為 .json 文件,並在您開始游戲時加載它。
主文件
from func1 import Func1
from func2 import Func2
class GameSettings():
def __init__(self, printX=False, printZ=False):
self.settings = { 'printX': printX, 'printZ': printZ }
settings = GameSettings(printX=True, printZ=False)
func1 = Func1(settings)
func1.myFunc1(1, 2)
print(func1.settings.settings)
settings.settings.update({'printX': False})
print(func1.settings.settings)
func1.myFunc1(1, 2)
func2 = Func2(settings)
func2.myFunc2(3)
settings.settings.update({'printZ': True})
func2.myFunc2(3)
函數1.py
class Func1():
def __init__(self, settings=None):
self.settings = settings
def myFunc1(self, x, y):
if self.settings.settings['printX'] == True:
print(x)
函數2.py
class Func2():
def __init__(self, settings=None):
self.settings = settings
def myFunc2(self, z):
if self.settings.settings['printZ'] == True:
print(z)
這是執行此代碼的輸出
bash-5.1$ python3 main.py
1
{'printX': True, 'printZ': False}
{'printX': False, 'printZ': False}
3
您可以簡單地在其自己的模塊中實例化游戲設置,然后將其導入並在任何地方更改設置。
設置.py
class GameSettings:
pass
gameSettings = GameSettings()
主文件
from settings import gameSettings
gamesettings.score = 0
重要的是要意識到settings.py無論導入多少次都只會執行一次,並且每次都會導入同一個對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.