2022.10.11 - [Python] - 주식 알고리즘 만들기 - 5.2) 클래스 (__init__, self)
주식 알고리즘 만들기 - 5.2) 클래스 (__init__, self)
2022.10.10 - [Python] - 주식 알고리즘 만들기 - 5.1) 클래스 주식 알고리즘 만들기 - 5.1) 클래스 2022.10.09 - [Python] - 주식 알고리즘 만들기 - 4. 함수와 모듈 (모듈) 주식 알고리즘 만들기 - 4. 함수와 모..
jiain.tistory.com
출처 : https://wikidocs.net/1743
4) 클래스 네임스페이스
클래스와 인스턴스의 차이를 정확히 이해하는 것은 매우 중요합니다. 이를 위해서는 먼저 네임스페이스라는 개념을 알아야 합니다. 네임스페이스라는 것은 변수가 객체를 바인딩할 ...
wikidocs.net
1) 클래스 네임스페이스
클래스와 인스턴스의 차이를 정확히 이해하는 것은 매우 중요합니다. 이를 위해서는 먼저 네임스페이스라는 개념을 알아야 합니다. 네임스페이스라는 것은 변수가 객체를 바인딩할 때 그 둘 사이의 관계를 저장하고 있는 공간을 의미합니다.
즉 , 변수 'a =2'라고 했을 때 2라는 객체가 저된 주소를 가지고 있는데 그러한 연결 관계를 저장한 공이 바로 네임스페이스입니다. 이해가 안가시죠? 저도 이해하기엔 아직 부족한 부분이 있다고 생각합니다. 다음과 같은 클래스를 만들었다고 생각해봅시다.
class stock :
marktet = "kospi"
일단 네임스페이스라는 개념을 대략적으로 알았으니 이것을 어떻게 확인 할 수 있을까라는 궁금증이 생기기 시작합니다.
Stock 클래스의 네임스페이스를 파이썬 코드로 확인하려면 클래스의 __dict__ 속성을 확인하면 됩니다.
stock.__dict__
mappingproxy({'__module__': '__main__',
'market': 'kospi',
'__dict__': <attribute '__dict__' of 'stock' objects>,
'__weakref__': <attribute '__weakref__' of 'stock' objects>,
'__doc__': None})
딕셔너리 타입에 'market':'kospi'라는 키와 값 쌍이 존재하는 것을 확인할 수 있습니다. 네임스페이스가 존재하기 때문에 우리는 클래스 내에 변수에 접근할 수 있습니다. 네임스페이스를 설명하는 이유는 다음 코드를 보면서 말씀드리겠습니다.
위 코드를 보면 인스턴스 s1.market 변수 값을 kosdaq으로 넣었다고 클래스 stock.market 값이 변했을까요? 그렇지 않습니다. 그렇다는건 클래스 stock.market과 인스턴스 s1.market 변수는 독립적이라는 것을 알 수 있습니다. s1.market 변수를 값을 자유자재로 바꿀 수 있으니까요.
이제 s2.market 변수값을 살펴보도록 하겠습니다. s2.market 변수값은 클래스 변수값과 똑같다는 걸 알 수 있습니다. 그렇습니다. 인스턴스 변수의 네임스페이스는 자체의 변수가 없으면 클래스 변수를 참조해서 불러온다는 특징이 있습니다.
자 이제는 클래스 변수와 인스턴스 변수의 차이점에 대해서 궁금해지지 않나요?
2) 클래스 변수와 인스턴스 변수
이번 파트에서는 클래스 변수(class variable)와 인스턴스 변수(instance variable)에 대해 살펴보겠습니다.
class 주식잔고 :
num_stocks =0
def __init__(self, name)
self.name = name
주식잔고.num_stocks += 1
def __init__(self, name)
self.name = name
주식잔고.num_stocks -= 1
주식잔고를 클래스로 표현해서 만들었습니다. 주식잔고 클래스에는 생성자와 소멸자가 있습니다. 생성자(__init__)가 클래스의 인스턴스가 생성될 때 자동으로 호출되는 함수라면 소멸자(__del__)는 클래스의 인스턴스가 소멸될 때 자동으로 호출되는 함수입니다.
엔씨소프트 = 주식잔고("엔씨소프트")
카카오페이 = 주식잔고("카카오페이")
주식잔고의 인스턴스를 2개 형성하였습니다.
주식잔고.num_stocks
2
위 코드를 보고 결과값을 분석해봅시다.
우리는 인스턴스를 생성할 때마다 주식잔고 클래스의 num_stocks의 변수 값을 +1 해주도록 했습니다. 그렇기 때문에 주식잔고 클래스 내의 num_stocks 값이 2가 된것임을 알 수 있습니다.
엔씨소프트.num_stocks
2
마찬가지고 인스턴스의 num_stocks 값도 2인 것을 알 수 있습니다. 이거는 이전 파트내용처럼 네임스페이스가 인스턴스 내에 변수가없다는 것을 알았고, 클래스 내의 변수값을 참조하도록 결과값을 가져온것이죠
위 코드가 오류인 이유는 클래스내에서는 name변수가 저장되지 않았기 때문이죠. 여기서 우리는 클래스가 인스턴스 변수를 참조하지 않는다라는 것을 알게 된것입니다.
'Python' 카테고리의 다른 글
주식 알고리즘 만들기 - 5. 5) 클래스 연습문제 (0) | 2022.10.11 |
---|---|
주식 알고리즘 만들기 - 5.4) 클래스 (상속) (0) | 2022.10.11 |
주식 알고리즘 만들기 - 5.2) 클래스 (__init__, self) (0) | 2022.10.11 |
주식 알고리즘 만들기 - 5.1) 클래스 (0) | 2022.10.10 |
주식 알고리즘 만들기 - 4. 함수와 모듈 (모듈) (0) | 2022.10.09 |