题
我有一类需要抓住了在另一个属性集。这不是一个标准的数据类型,虽然。下面的代码;
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.this
或Graphics.that
指类本身的属性。
其他提示
我在想,类和实例在Python属性之间的差异的简短说明可能对您有所帮助。
当编写代码,如下所示:
class Graphics:
screen_size = (1024, 768)
类Graphics
实际上是一个对象本身 - 一个类对象。因为你这里面定义screen_size
,screen_size
是Graphics
对象的属性。您可以在下面看到这一点:
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"