如何从另一个类python中获取变量

时间:2017-06-15 22:56:46

标签: python oop variables pygame

如何从另一个类中获取变量

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()变量

2 个答案:

答案 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,也不知道这段代码打算做什么,但是我知道这种方法有效,因为我一直在使用它。