파이썬 클래스 변수에 대해 궁금합니다

조회수 1538회
Class Dog :

    name = str()
    trick = []

A = Dog()

B = Dog()


A.name = 'Apple'

B.name = 'Banana'

A.trick.append('say_hi')

B.trick.append('stand')

이렇게 클래스를 만들면 A와 B의 name 은 각자 Apple, Banana로 저장이 되는데,

왜 trick 은 'say_hi' 와 'stand' 가 함께 저장되나요?

name 과 trick 사이에 무슨 차이가 있나요??

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기
    >>> class Dog:
    ...     name = str()
    ...     trick = []
    ...     
    >>> A = Dog()
    >>> B = Dog()
    >>> A.name = 'Apple'
    >>> B.name = 'Banana'
    >>> A.trick.append('say_hi')
    >>> B.trick.append('stand')
    >>> A.__dict__['name']
    'Apple'
    >>> A.__class__.__dict__['name']
    ''
    >>> A.__class__.__dict__['trick']
    ['say_hi', 'stand']
    >>> A.__dict__['trick']
    Traceback (most recent call last):
      File "<interactive input>", line 1, in <module>
    KeyError: 'trick'
    >>> A.trick
    ['say_hi', 'stand']
    

    파이썬은 변수들을 딕셔너리로 관리합니다.

    인스턴스 변수는 dict 필드로 저장되어 있으며 클래스 변수의 경우 class가 추가되어 객체.class.dict필드로 접근이 가능합니다.

    trick 은 자바나 c++ 의 static 키워드와 같이 동작함을 알 수 있고(인스턴스 변수없음) 프리미티브 타입의 경우 인스턴스를 생성한 경우 인스턴스 변수를 별도로 생성함을 알 수 있습니다.

    • 감사합니다 그렇다면 위 name은 인스턴스 변수인가요?? 강신구 2017.10.31 17:56
    • 네. 인스턴스 변수인 셈입니다. 정영훈 2017.11.3 17:43

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)