私は最近Pythonの学習を開始することに決めました。ほとんどの時間私はC++を使いましたが、いくつかのことは私にとって非常に混乱しています。ここでPythonで初期化されたオブジェクトを突然変異させる正しい方法
は、私は(ここでは完全なコード:http://pastebin.com/tj3qJnvM)との問題を抱えている私のコードです
class Display:
def __init__(self, background):
resolution = (800, 600)
screen = pygame.display.set_mode(resolution)
background = pygame.Surface(screen.get_size())
background.fill((255, 255, 255))
background = background.convert()
def init(map, background):
pygame.init()
display = Display(background)
map.draw(background)
def main():
background = None
init(map, background)
私は(ライン61)init
でdisplay = Display(background)
を呼び出すと、それは次回に使用することができますので、それがバックグラウンドを初期化する必要がありますライン。代わりに、私はバックグラウンドがNoneであるというエラーが出ます。
私が正しく理解しているのは、バックグラウンドがNoneに設定されていて、Noneが変更できないために、Displayコンストラクタにローカル変数の背景が作成されるためです。
この状況にはどのようにアプローチすればよいですか?
背景をDisplayクラスのメンバにするのが最善であると知っていますが、Cでポインタ/参照を宣言するのと同様のものを作成する方法を理解したいと思います。 これは、それをいくつかの関数に渡すと便利です。
Pythonでも可能ですか、毎回回避策が必要ですか?
質問に[mcve]を入れてください。また、私はインスタンス属性であると仮定しているため、 'self.'を使用していません。チュートリアルを読んでください。 – jonrsharpe
申し訳ありませんが、例文は読みやすくする必要があります。私は他の関数の中でメインからバックグラウンドを初期化したいので、この場合は自己を使いたくありません。 – Thun
チュートリアルの[セクション9、クラス](https://docs.python.org/3/tutorial/classes.html)を読んでいる可能性があります。 Pythonのやり方を学ぶためにもう少し時間を費やす必要があるようです。 。 '' 'display''は' 'Display''のインスタンスであり、その属性は' 'display.attribute''でアクセスされます。 - しかしあなたのクラスを書いたやり方では、インスタンス属性はありません。おそらく、[ネーミングとバインディング](https://docs.python.org/3/references/executionmodel.html#naming-and-binding)も読んでください。 – wwii