Doge log

Abby CTO 雑賀 力王のオフィシャルサイトです

クラスコーディングでのクラスとインスタンスの差

うーん、クラスとインスタンスの差がJavaと異なるのでちょっと困惑するかも。
クラス変数とインスタンス変数の違いの実例はこんな感じ

class SharedData:
    spam = 42

x = SharedData()
y = SharedData()
print x.spam, y.spam, SharedData.spam
#インスタンス変数に値を入れるのでy,SharedDataクラスには影響がない
x.spam = 80
print x.spam, y.spam, SharedData.spam
#クラス変数に値を入れるのでy,SharedDataクラスにのみ影響が出る
SharedData.spam = 0
print x.spam, y.spam, SharedData.spam

実行すると

42 42 42
80 42 42
80 0 0

となる。
ここでいやらしいのは'x.spam = 80'と値を入れてしまった時点でインスタンス変数的に扱われてしまう点だろう。
(クラス変数の変更が反映されなくなってしまう)
基本的にJavaと同じルールなものがなく(”Javaでいうところの〜”みたいなものがないってこと)+αとなってしまうのでJava⇔Pyhtonを行き来する際にはちょっと注意必要かも
うくく。