如何解决global 语句无法按预期工作,并且无法在类中访问
screen = None #is defined outside of any function
def main():
pygame.init()
font = pygame.font.SysFont("Arial",20)
img_logo = pygame.image.load("gfx\logo.png")
img_logo = pygame.transform.smoothscale(img_logo,(30,30))
pygame.display.set_icon(img_logo)
pygame.display.set_caption("Title")
global screen # is set as global
screen = pygame.display.set_mode((res)) #this works as intended and displays correctly
running = True
load.Menu(screen,res)
#----MAIN LOOP
while running:
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONUP:
Eventhandler.onClick()
if event.type == pygame.QUIT:
running = False
pygame.display.update()
class Button:
global screen
print(screen) # returns None
def __init__(self,img,pos,size):
self.img = img
self.pos = pos
self.size = size
button_start = Main.Button("button_start",[200,550],[230,100])
类中的 print(screen) 返回 None
,这意味着它无法访问 screen
,即使它在类的开头声明为全局。似乎 main()
只使用了一个本地实例,它实际上并没有改变函数外部的变量。但这意味着 global screen
不起作用。
我错过了什么?这不是全局语句的工作原理吗?因为从我读到的内容来看,如果我在该函数中使用该语句,我应该能够在全局范围内甚至在函数内局部更改变量。
解决方法
简单地跟踪程序的执行将向您展示问题:类的主体在其定义期间执行。您的流程是将 screen 设置为 None
,定义 main
,然后定义 Body
。最后一个定义包括执行 print(screen)
,它仍然是 None
。
最重要的是,任何使用 global
都强烈表明您的系统设计是不稳定的。请通过“正确地”将任何需要的信息传递到类中来替换您的全局使用——至少直到您完全所有理解类和程序初始化的含义以及各种交互(到那时,你可能已经不再考虑全局了。:-)).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。