簡體   English   中英

跨多個文件加載對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM