どのように標準的なデータ型ではないクラス属性を作るのですか?
質問
私は別に設定された属性をつかむ必要がある1つのクラスを持っています。これは、しかし、標準のデータ型ではありません。ここでは、コードがあります。
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:
何という疑問符がする必要がありますか。私は、私はpygameのコールがどうなるかのデータ型見当がつかない、...何も動いていないようにみえ「」、0、どれを試していないてきました。 :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
は、上記のスニペットの最初のassert文で示すように、このクラス定義の後にどこでも使用することができる。
編集:そして、クラス
それはとてもそう 動作する可能性があります。object
タイプです。
(私が正しくあなたの質問を理解している場合)self.screen = object()
うわ... PEBKACます。
私はので、私はあなただけDEFS外プロトタイプ以上のことを行うことができます忘れ続けるCに使用しています。
このように書き直し、それが働いた:
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"