[BB-PY] 1. 파이썬 데이터 모델

본 글은 파이썬 공부를 위해 전문가를 위한 파이썬를 정리한 글입니다.

들어가며

  • 파이썬의 최고의 장점중 하나는 일관성
  • 데이터 모델은 일종의 프레임워크로서, 파이썬을 설명하는 것이라고 생각할 수 있으며, 시퀀스, 반복자, 함수, 클래스, 콘텍스트 관리자 등 언어 자체의 구성단위에 대한 인터페이스를 공식적으로 정의
  • 파이썬 인터프리터는 특별 메서드를 호출해서 기본적인 객체 연산을 수행하는데, 종종 특벽한 구문에 의해 호출
  • 특별 메서드는 구현한 객체가 다음과 같은 기본적인 언어 구조체를 구현하고 지원하고 함께 사용할 수 있게 해줌
    • 반복
    • 컬렉션
    • 속성 접근
    • 연산자 오버로딩
    • 함수 및 메서드 호출
    • 객체 생성 및 제거
    • 문자열 표현 및 포맷
    • 블록 등 콘텍스트 관리
  • 특별 메서드를 던더 메서드라고도 한다(더블 언더바 메서드)

파이썬 카드 한 벌

import collections

# namedtuple을 이용해서 메서드를 가지지 않는 일련의 속성으로 구성된 클래스를 만들 수 있다.
Card = collections.namedtuple('Card', ['rank', 'suit'])

class FrenchDeck:
  ranks = [str(n) for n in range(2, 11)] + list('JQKA')
  suits = 'spades diamonds clubs hearts'.split()

  def __init__(self):
    self._cards = [Card(rank, suit) for suit in self.suits
                                    for rank in self.ranks]

  def __len__(self):
    return len(self._cards)


  def __getitem__(self, position):
    return self._cards[position]
  • 사용자가 표준 연산을 수행하기 위해 클래스 자체에서 구현한 임의 메서드명을 암기할 필요가 없다.(size()?, length()?)
  • 파이썬 표준 라이브러리에서 제공하는 풍부한 기능을 별도로 구현할 필요 없이 바로 사용할 수 있다.(random.choice)
  • 특별 메서드를 구현함으로써 사용자가 정의한 객체는 표준 파이썬 시퀀스처럼 작동하므로 반복 및 슬라이싱 등의 핵심 언어 기능을 사용할 수 있다.

특별 메서드는 어떻게 사용되나

  • 특별 메서드는 파이썬 인터프리터가 호출하기 위한 것
  • 일부 특별 메서드는 암묵적으로 호출(iter())
  • 일반적으로 사용자 코드에서 특별 메서드를 직접 호출하는 경우는 많지 않으며, 특별 메서드를 호출해야하는 경우에는 관련된 내장 함수를 호출하는 것이 좋음
  • 사용자 정의 속성을 만들 때 이중 언더바를 가진 형태의 속성명은 사용하지 말 것, 현재 이런 속성명이 사용되고 있지 않더라도 나중에 특별한 의미를 갖도록 정의될 수 있기 떄문

특별 메서드 개요

파이썬 언어 참조 문서의 데이터 모델 장에서 83개 특별 메서드 이름을 나열한다.

len()은 메서드가 아닐까

  • list, str, bytearray 등과 같은 내장 자료형의 경우 파이썬 인터프리터는 len() 메서드를 사용하는 대신 PyVarObject C 구조체의 ob_size 필드의 값을 반환하여 속도에 최적화
  • 파이썬의 선(The Zen of Pathon)의 “실용성이 순수성에 우선한다.”
  • __len()__ 특별 메서드를 통해 정의한 객체에서 len() 메서드를 직접 정의할 수 있음
  • 내정형 객체의 효율성과 언어의 일간성 간의 타협점을 찾은 것

SmileCat

SmileCat
How do you define yourself?

[Openlayers] Render Event 정리

## 이벤트### [Map](http://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html)| event | module | note || :--: | -- | -- || [postcompose](...… Continue reading