본문 바로가기
Python Object-oriented Programming

Instance Variables

by 자동매매 2023. 4. 3.

출처 : https://www.pythontutorial.net/python-oop/python-instance-variables/

 

Introduction to the Python instance variables

 

Python에서 클래스 변수 클래스 바인딩되고  인스턴스 변수 클래스의 속성 인스턴스에 바인딩됩니다. 인스턴스 변수는 인스턴스 속성이라고도 합니다.

다음은   개의 클래스 변수가 있는 HtmlDocument 클래스를 정의합니다.

 

from pprint import pprint


class HtmlDocument:
    version = 5
    extension = 'html'


pprint(HtmlDocument.__dict__)

print(HtmlDocument.extension)
print(HtmlDocument.version)

Output:

mappingproxy({'__dict__': <attribute '__dict__' of 'HtmlDocument' objects>,
              '__doc__': None,
              '__module__': '__main__',
              '__weakref__': <attribute '__weakref__' of 'HtmlDocument' objects>,
              'extension': 'html',
              'version': 5})
html
5

 

클래스에는 extension version이라는 가지 클래스 변수가 있습니다. 파이썬은 변수를 __dict__ 속성에 저장합니다.

클래스를 통해 클래스 변수에 액세스하면 Python 클래스의 __dict__에서 클래스 변수를 찾습니다.

 

다음은 HtmlDocument 클래스의 인스턴스를 만듭니다.

 

home = HtmlDocument()

 

home HtmlDocument 클래스의  인스턴스입니다  . 인스턴스는 자신의 자체 __dict__ 속성이 있습니다.

 

home = HtmlDocument()
print(home.__dict__)      # {}

# 개체에 초기화할 것이 없으므로 빈 dict이다.

 

home.__dict__ HtmlDocument.__dict__ HtmlDocument 클래스의 클래스 변수를 저장하는 것처럼 home 객체   인스턴스 변수를 저장합니다.

 

클래스의 __dict__ 속성과  달리 인스턴스의 __dict__ 속성  형식은 사전입니다. 예를 들어:

 

print(type(HtmlDocument.__dict__))  # <class 'mappingproxy'>
print(type(home.__dict__))          # dict

 

사전 mutable(변경 가능) 때문에 instance 속성은 변경이 가능하다.

Python 클래스의 인스턴스에서 클래스 변수에 액세스를  허용합니다. 예를 들어:

 

print(home.extension)
print(home.version)

 

경우 Python 먼저 변수 extension, version home.__dict__ 에서 찾습니다  . 거기에서 그들을 찾지 못하면 class 올라가 HtmlDocument.__dict__에서 검색합니다.

그러나 파이썬이  인스턴스의 __dict__ 변수에서 변수를 찾으면 클래스의 __dict__에서 검색을 멈춘다.

다음은 home 객체 version 변수를 정의합니다.

 

home.version = 6

 

파이썬은 versioon 변수를 home 객체 __dict__ 속성에  추가합니다:

이제 __dict__에는  하나의 인스턴스 변수가 포함됩니다.

 

home.version = 6
print(home.__dict__)  # {'version': 6}
print(home.version)   # 6

 

클래스 변수를 변경하면 이러한 변경 사항이 클래스의 인스턴스에도 반영됩니다. ( class 속성은 공유되므로 )

 

HtmlDocument.media_type = 'text/html'
print(home.media_type)                # text/html

 

Initializing instance variables

 

실제로는 __init__ 메서드에서 클래스의 모든 인스턴스에 대한 인스턴스 변수를 초기화합니다.

예를 들어, 다음은   개의 인스턴스 변수 name, contents 있는 HtmlDocument 클래스를 다시 정의합니다.

 

class HtmlDocument:
    version = 5
    extension = 'html'

    def __init__(self, name, contents):
        self.name = name
        self.contents = contents

 

HtmlDocument 인스턴스를 만들 다음과 같이 해당 인수를 전달해야합니다.

 

blank = HtmlDocument('Blank', '')

 

Summary

 

  • 인스턴스 변수 클래스의 지정 인스턴스에 바인딩됩니다.
  • Python 인스턴스 변수를 인스턴스의 __dict__ 속성에 저장합니다.
    각 인스턴스에는 고유한 __dict__ 속성,  key를 갖으므로 각각 다를 수 있습니다.
  • 인스턴스를 통해 변수에 액세스하면 Python 인스턴스의 __dict__ 속성에서 변수를 찾습니다. 변수를 찾을 없으면 올라가서  클래스의 __dict__ 속성에서 찾습니다.
 

'Python Object-oriented Programming' 카테고리의 다른 글

__str__ Method  (0) 2023.04.03
Private Attributes  (0) 2023.04.03
__init__ Method  (0) 2023.04.03
Class Methods  (0) 2023.04.02
Methods  (0) 2023.04.02

댓글