Pythonで新しく学んだこと

同名のクラス変数とインスタンス変数

クラス変数とインスタンス変数で同じ名前を使う場合、インスタンス変数が作られる前まではインスタンス変数とクラス変数が同じ実体になっているが、インスタンス変数が作られた時点でクラス変数とは別の実体になっていることがわかる。

class Class1:
    value = 5
    def set(self):
    self.value = self.value + 1

a = Class1()
print(f'instance value = {a.value}')
print(f'class value = {Class1.value}')
Class1.value += 5
print(f'instance value = {a.value}')
print(f'class value = {Class1.value}')
a.value += 2
print(f'instance value = {a.value}')
print(f'class value = {Class1.value}')
Class1.value += 3
print(f'instance value = {a.value}')
print(f'class value = {Class1.value}')

出力

instance value = 5
class value = 5
instance value = 10
class value = 10
instance value = 12
class value = 10
instance value = 12
class value = 13