https://engineer-mole.tistory.com/99
1. Instance Variable
Instance Variable은 각각의 인스턴스 마다 독립한 변수이다.
1) Instance Variable의 선언과 접근 방법
instance variable를 만드는 경우는 클래스 내의 메소드에 아래와 같이 작성한다.
일반적으로 instance variable의 생성은 Constructor 클래스 __init__()내부에서 이루어진다.
self.instance_variable = value
또한, instance variable에 접근할 때는 아래와 같이 작성한다.
self.instance_variable
2) 인스턴스 변수의 사용예
아래는 instance variable를 작성하고 그 variable를 표시하는 예이다.
class Myclass:
def __init__(self, text) : # 초기화 : 인스턴스 작성시에 자동적으로 호출된다.
self.value = text # 인스턴스 변수 value를 선언한다.
def print_value(self): # 인스턴스 변수 value의 값을 표시하는 함수
print(self.value) # 인스턴스 변수 value에 접근하고 표시한다.
if __name__ = "__main__":
a = MyClass("123") # 인스턴스 a를 작성
b = MyClass("abc") # 인스턴스 b를 작성
print(a.value) # 123
print(b.value) # abc
a.print_value() # 123
b.print_value() # abc
위의 예시에서 class MyClass내의 변수 value는 인스턴스 변수로서 정의되어 있다. 인스턴스 a, b의 2개의 instance가 작성되어 있지만, 각각의 instance variable의 value는 별도의 값을 보존하고 있다는 것을 확인할 수 있다.
또한 Python에서는 class 내에 정의된 메소드로부터 instance variable로 접근하는 경우에 메소드(인스턴스 메소드)의 인수에 self를 전달하여 접근한다. (self가 아닌 다른 문자열도 동작하지만, Python에서는 관습적으로 self를 전달한다).
인수의 self로는 자동적으로 인스턴스 자체가 전달된다. 위 예의 print_value method instance variable의 value에 접근하고 그 값을 표시한다.
2. Class Variable
class variable는 instance variable와 달리 모든 인스턴스 사이에 공유된 값을 가진 변수이다.
class variable는 인스턴스를 생성하는 것이 아닌 참고하는 것이 가능하다.
1) class variable의 선언과 접근 방법
class variable를 선언할 때는 instance variable와 달리 self를 붙이지 않고 클래스 내에 선언한다.
class MyClass:
class_variable = value
또한, 클래스 변수에 접근할 때는 아래와 같이 기재한다.
class.class_variable
2) 클래스 변수의 사용예
아래에 class variable를 작성하고 그 변수의 값을 표시하는 예이다.
class MyClass:
value = "abc" # 클래스 변수를 선언
if __name__ == "__main__":
print MyClass.value # abc
위의 예에서는 클래스의 인스턴스를 생성하는 것이 아닌 Myclass 의 클래스 변수 value에 접근하여 그 값을 표시하고 있다.
아래의 코드는 클래스의 인스턴스를 생성하고 클래스 변수를 표시하는 예이다.
class MyClass:
value = 0 # 클래스 변수를 선언
def __init__(self): # 초기화 : 인스턴스 생성
MyClass.value += 1
if __name__ == "__main__":
a = MyClass() # 인스턴스 a를 생성한다.
print MyClass.vlaue # 1
b = MyClass() # 인스턴스 b를 생성한다.
print MyClass.value # 2
위 코드에서는 인스턴스를 생성할 때마다 클래스 변수 value 를 +1하고 있다.
3) 클래스 변수 사용시 주의사항
클래스 변수에 접근할 때는 특별히 이유가 없다면
'instance.class_variable' 나 'self.class_variable'와 같이 접근하는 것은 피해야한다.
class.class_variable을 이용하여 Class에서 바로 접근한다.
python에는 instance variable를 인스턴스 객체로부터 생성하는 것이 가능하므로 의도치 않게 class variable를 instance variable로 은폐해버리는 경우가 있다.
3. Summary Table