YOGAE

TODO: FIXME:

Array Tuple Dictionary 비교 및 접근방법

26 Nov 2018

javascript에서 사용하는 객체 접근 방식과 python에서 사용하는 Array Tuple Dictionary의 접근 방식이 다르다. Array Tuple Dictionary를 비교하고 접근방식을 정리한다.

자료형

1. Array

  • []는 배열을 선언하거나 초기화할 때, 배열의 원소에 접근할 때 사용

    arr = []
    arr = [1,2,3,4]
    arr[3]
    

2. Tuple

  • ()는 튜플을 선언하거나 초기화할 때 사용

  • ()는 튜플의 원소에 접근할 때 사용

  • 튜플은 이미 생성된 원소를 제거하거나, 변경할 수 없음

  • 원소의 타입이 같을 때 주로 사용됨(python의 권장 사항)

    myTuple = () 
    myTuple = (1,2,3,4)
    myTuple[3]
    

3. Dictionary

  • {}는 딕셔너리를 선언하고나 초기화 할 때 사용

  • []는 key에 대응하는 value를 할당하거나, value에 접근할 때 사용

    myDictionary = {}
    myDictionary = {"mouse":3, "penguin":5}
    myDictionary["mouse"] 
    myDictionary["cat"] = 1
      
    # error 발생
    # 'dict' object has no attribute 'cat'
    myDictionary.cat 
    
  • dictionary를 object 처럼 접근하기

    class objectview(object):
        def __init__(self, d):
            self.__dict__ = d
      
    d = {'a': 1, 'b': 2}
    o = objectview(d)
    assert o.a == 1
    assert o.b == 2
      
    # error 발생
    # 'objectview' object is not subscriptable
    print(o['b'])
      
    # 아래와 같이 수정
    print(o.__dict__['b'])
      
    # 위에 object는 dictionary 처럼 동작하지 않는다.
    # dictionary methods를 사용하기 위하서는 __dist__에 접근해야만 한다.
    
    class objdict(dict):
        def __getattr__(self, name):
            if name in self:
                return self[name]
            else:
                raise AttributeError("No such attribute: " + name)
      
        def __setattr__(self, name, value):
            self[name] = value
      
        def __delattr__(self, name):
            if name in self:
                del self[name]
            else:
                raise AttributeError("No such attribute: " + name)
      
    d = {'a': 1, 'b': 2}
    myDict = objdict(d)
      
    print(myDict.b)
    print(myDict['b'])