python - 使用从模块导入的类的问题

时间:2016-02-14 22:57:42

标签: python

我的任务是制作游戏,应该有多个模块以避免在一个脚本中混乱。我遇到了从其中一个模块导入变量的问题。到目前为止,我有一个设置,一个主设置。设置非常简单,并且:

class Settings():
def __init__(self):
    self.screen_width = 1920
    self.screen_height = 1080
    self.bg_color = (230, 230, 230)

非常简单,但当我尝试引用这些变量时,它会为“设置”类提供“未解析的属性引用'screen_width'

主要是这样:

import sys, pygame
from game_settings import Settings

def run_game():
    #Initialize the game and create the window
    pygame.init()
    screen = pygame.display.set_mode((Settings.screen_width,Settings.screen_height), pygame.FULLSCREEN)
    pygame.display.set_caption("Alien Invasion")

while True:

    #Listening for events
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
             sys.exit()
    screen.fill(Settings.bg_color)
    pygame.display.flip()

run_game()

我想也许这可能是一个PyCharm问题,但发现它在IDLE中做同样的事情,那么导入变量的正确方法是什么?

感谢您花时间阅读本文!

3 个答案:

答案 0 :(得分:2)

您需要创建Settings类的实例,因为您在__init__方法中设置的属性是实例属性。

尝试这样的事情:

def run_game():
    my_settings = Settings() # create Settings instance
    pygame.init()
    screen = pygame.display.set_mode((my_settings.screen_width, # lookup attributes on it
                                      my_settings.screen_height),
                                     pygame.FULLSCREEN)
    # ...

答案 1 :(得分:0)

您需要创建Settings对象的实例:s = Settings()

用法:s.bg_color等。

OR

更改您的“设置”类,并且可以静态访问属性:

class Settings():
    screen_width = 1920
    screen_height = 1080
    bg_color = (230, 230, 230)

答案 2 :(得分:0)

两个文件必须位于同一文件夹中,您必须创建Settings类的实例。然后,您可以访问实例的属性。

main.py:

from game_settings import Settings
s = Settings()
print(s.bg_color)

game_settings.py:

class Settings():
    def __init__(self):
        self.screen_width = 1920
        self.screen_height = 1080
        self.bg_color = (230, 230, 230)

当您运行main.py时,输出将为:

(230, 230, 230)