如何从另一个类中获取变量
white=(255,255,255)
class window:
def open(a,b,c):
displaysurf=pygame.display.set_mode(a)
pygame.display.set_caption(b)
displaysurf.fill(c)
def close():
while True:
for event in pygame.event.get():
if event.type==QUIT:
pygame.quit()
sys.exit()
pygame.display.update()
class img():
def show(image,position):
pygame.image.load(image)
displaysurf.blit(image,position)
我想从displaysurf
函数
window.open()
变量
答案 0 :(得分:0)
除非您使用return,否则无法访问函数中的已分配变量。但是,如果变量在类实例中已分配,则可以在某些限制下访问它。
window
类因此采用
class window(object):
# initialize class variable
def __init__(self, a, b, c):
self.display_surf = pygame.display.set_mode(a)
pygame.display.set_caption(b)
self.display_surf.fill(c)
def close(self):
while True:
for event in pygame.event.get():
if event.type==QUIT:
pygame.quit()
sys.exit()
pygame.display.update()
open()
函数嵌入在__init__()
函数中,因为display_surf
变量仅分配了参数a
,此时设置其他属性也是如此。
现在要访问该变量,首先必须初始化该类。您可以在创建img
课程期间或之后执行此操作。为了获得更大的灵活性,最好这样做。因此,img
类需要额外的参数来访问变量。
class img(object):
def show(win, img, pos):
pygame.image.load(img)
win.display_surf.blit(img, pos)
# set up and access
win = window( # a, b, c)
img.show(win, # img, pos)
我说限制的原因是因为在使用变量之前必须首先初始化window
类,并且任何想要使用它的函数都必须将它作为参数之一。
如果您不想将其作为函数的参数包含在内,则可以将win
变量设为全局变量。但是,建议不要这样做,因为变量可能会在预定的路线之外被篡改并使整个程序陷入混乱。
答案 1 :(得分:0)
您绝对可以访问其他类中的变量。您只需要在变量名之前添加类名和函数名,并用句点将它们分开,例如:
CLASSNAME.FunctionName.variableName = "abc"
这将使您可以从其他函数访问变量,而不必将它们设置为全局变量,放在初始化之前或使用return语句。首先是一个基本示例:
class CLASS1:
def testingFunc():
CLASS1.testingFunc.thisValue = 123
class CLASS2:
def createValue():
CLASS1.testingFunc()
print(CLASS1.testingFunc.thisValue)
CLASS2.createValue()
这是您的代码可能需要在特定上下文中才能实现的功能:
white=(255,255,255)
class window:
def open(a,b,c):
window.open.displaysurf=pygame.display.set_mode(a)
pygame.display.set_caption(b)
window.open.displaysurf.fill(c)
def close():
while True:
for event in pygame.event.get():
if event.type==QUIT:
pygame.quit()
sys.exit()
pygame.display.update()
class img():
def show(image,position):
pygame.image.load(image)
window.open.displaysurf.blit(image,position)
您可能想编写另一个函数,在其中可以调用window类和img类,这样就不必不必要地创建某些东西的额外实例。我不熟悉pygame,也不知道这段代码打算做什么,但是我知道这种方法有效,因为我一直在使用它。