我有一类需要抓住了在另一个属性集。这不是一个标准的数据类型,虽然。下面的代码;

class graphics:
def __init__(self, Fullscreen = False, Width = 640, Height = 480):
    print "Graphics Init"
    SCREEN_SIZE = (Width, Height)
    pygame.init()
    if Fullscreen:
        self.screen = pygame.display.set_mode(SCREEN_SIZE, FULLSCREEN, 32)
        print "Fullscreen Initialized"
    else:
        self.screen = pygame.display.set_mode(SCREEN_SIZE, 0, 32)
        print "Non-Fullscreen Initialized"

我需要做的是参考画面属性,它我可以self.screen设置并是类内可读...但是从另一个类我必须设置

screen = ?

class graphics:

这是什么问号需要呢?我试过0,无“” ......似乎没有任何工作,我不知道什么样的数据类型pygame的呼叫会。 :S

有帮助吗?

解决方案

您很少,如果有的话,一个类的引用属性。你表示一个对象的属性。

(另外,类名应该是大写:Graphics)。

class Graphics:
SCREEN_SIZE = (640, 480)
def __init__(self, Fullscreen = False, Width = 640, Height = 480):
    print "Graphics Init"
    self.SCREEN_SIZE = (Width, Height)
    pygame.init()
    if Fullscreen:
        self.screen = pygame.display.set_mode(SCREEN_SIZE, FULLSCREEN, 32)
        print "Fullscreen Initialized"
    else:
        self.screen = pygame.display.set_mode(SCREEN_SIZE, 0, 32)
        print "Non-Fullscreen Initialized"

下面是获取或设置对象的属性的一个例子。

g= Graphics() # create an object
# access the object's instance variables
print "screen", g.screen
g.screen= pygame.display.set_mode(SCREEN_SIZE, FULLSCREEN, 32)

请注意,我们从我们的类(g)中创建一个对象(Graphics)。我们不引用类经常在所有。几乎一类名称使用的唯一时间是创建对象实例(Graphics())。我们很少说Graphics.thisGraphics.that指类本身的属性。

其他提示

我在想,类和实例在Python属性之间的差异的简短说明可能对您有所帮助。

当编写代码,如下所示:

class Graphics:
    screen_size = (1024, 768)

Graphics实际上是一个对象本身 - 一个类对象。因为你这里面定义screen_sizescreen_sizeGraphics对象的属性。您可以在下面看到这一点:

assert Graphics.screen_size == (1024, 768)

在Python中,这些类对象可以用来像功能 - 只使用调用语法:

g = Graphics()

g称为类Graphics的“实例”。当你创建一个类的实例,所有属性不匹配实例的属性看类对象的下一个属性查找。这就是为什么这个查询如下:

assert g.screen_size == (1024, 768)

如果我们添加一个属性到的实例的名称相同,但是,实例上的查询会成功,这将不必去寻找类对象。你基本上“掩盖”类对象的值与上直接设置实例的值。请注意,此更改类对象的属性的值:

g.screen_size = (1400, 1050)
assert g.screen_size == (1400, 1050)
assert Graphics.screen_size == (1024, 768)

所以,你在做什么你__init__方法的究竟的我们上面做:设置的实例的属性的,self

class Graphics:

    screen_size = (1024, 768)

    def __init__(self):
        self.screen_size = (1400, 1050)

g = Graphics()
assert Graphics.screen_size == (1024, 768)
assert g.screen_size == (1400, 1050)

在值Graphics.screen_size可以在任何地方这个类定义后使用,如图与上述代码段中的第一断言语句。

编辑:不要忘记检查 Python的教程对班,它覆盖所有这些以及更多。

这是有可能的一个object类型,从而

self.screen = object()

可能工作(如果我理解正确你的问题)。

啊... PEBKAC。

我习惯了,我一直忘了你可以做的不仅仅是原型DEFS之外℃。

重写了,因为这和它的工作:

class graphics:
SCREEN_SIZE = (640, 480)
screen = pygame.display.set_mode(SCREEN_SIZE, 0, 32)
def __init__(self, Fullscreen = False, Width = 640, Height = 480):
    print "Graphics Init"
    self.SCREEN_SIZE = (Width, Height)
    pygame.init()
    if Fullscreen:
        self.screen = pygame.display.set_mode(SCREEN_SIZE, FULLSCREEN, 32)
        print "Fullscreen Initialized"
    else:
        self.screen = pygame.display.set_mode(SCREEN_SIZE, 0, 32)
        print "Non-Fullscreen Initialized"
scroll top