クラス変数(class variable)とインスタンス変数(instance variable)
class Factory:
num = 0 # 클래스 변수
def increaseClassNum(self):
Factory.num += 1 # 클래스를 이용한 변수 접근
def increaseInstanceNum(self):
self.num += 1 # 인스턴스 변수
クラス変数はクラスを宣言するときに直接次のself.~非形状変数、インスタンス変数はself~形態の変数と考えられる.
クラス変数とインスタンス変数にはいくつかの特徴があります.
1.クラス変数はすべてのインスタンスで共有できます.
2.インスタンスのインスタンス変数がクラス変数と同じ名前で宣言されている場合、インスタンスで変数が呼び出されると、クラス変数ではなくインスタンス変数が呼び出されます.
イニシアチブ
様々な状況をより詳しく知るためのシナリオです.
idが同じであれば、同じを表す.
# 1. Factory 인스턴스 A 생성
A = Factory()
# 2. A 의 increaseClassNum() 수행
A.increaseClassNum()
print(id(A.num) == id(Factory.num)) # True
print(A.num) # 1
print(Factory.num) # 1
# 3. Factory 클래스를 통해 직접적으로 num 을 3으로 수정
Factory.num = 3
print(A.num) # 3
print(Factory.num) # 3
# 4. Factory 인스턴스 B 생성
B = Factory()
print(id(A.num) == id(B.num)) # True
print(B.num) # 3
print(Factory.num) # 3
# 5. B 의 increaseClassNum() 수행
B.increaseClassNum()
print(id(A.num) == id(B.num)) # True
print(A.num) # 4
print(B.num) # 4
print(Factory.num) # 4
# 6. B 의 increaseInstanceNum() 수행
B.increaseInstanceNum()
print(id(A.num) == id(B.num)) # False
print(id(A.num) == id(Factory.num)) # True
print(id(B.num) == id(Factory.num)) # False
print(A.num) # 4
print(B.num) # 5
print(Factory.num) # 4
Reference
この問題について(クラス変数(class variable)とインスタンス変数(instance variable)), 我々は、より多くの情報をここで見つけました https://velog.io/@seung-sang/class-variable-vs-instance-variableテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol