1
class Person(object):
kind = 'human'
def __init__(self, name):
self.name = name
def who_are_you(self):
print(self.name, self.kind)
p1 = Person('A')
p2 = Person('B')
p1.who_are_you()
p2.who_are_you()
1の実行結果
A human
B human
クラス変数(この場合はkind)は、
つくった全てのオブジェクトで共用される。
2
class T(object):
words = []
def add_word(self, word):
self.words.append(word)
c = T()
c.add_word('apple')
c.add_word('banana')
print(c.words)
d = T()
d.add_word('orange')
d.add_word('cake')
print(d.words)
2の実行結果
['apple', 'banana']
['apple', 'banana', 'orange', 'cake']
cというオブジェクトとdというオブジェクト2つのオブジェクトをつくったが、
wordsがクラス変数なので、
cとdで共用されてしまっている。
これがバグにつながる事がある。
これを防ぐためには、
都度__init__
で初期化(インスタンス変数に代入)する。
3
class T(object):
def __init__(self):
self.words = []
def add_word(self, word):
self.words.append(word)
c = T()
c.add_word('apple')
c.add_word('banana')
print(c.words)
d = T()
d.add_word('orange')
d.add_word('cake')
print(d.words)
3の実行結果
['apple', 'banana']
['orange', 'cake']