ch01. python data model

|

Python data model

  • sequence, 반복자 등 언어 자체의 구성단위에 대한 인터페이스를 공식적으로 정의한 것
  • 특별 method들을 통해서 새로 정의할 수 있음
  • 이들은 앞뒤에 __를 붙인다.
  • ex>
    • A[key]A.__getitem__(key)를 호출한다.

__len__, __getitem__

class myObject:
    def __init__(self):
        self._arr = [1,2,3]

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

    def __getitem__(self, position):
        return self._arr[position]

vector를 만들어보자

from math import hypot

class Vector:
    def __init__(self, x=0, y=0):
        self.x = x
        self.y = y

    def __repr__(self):  # 객체를 문자열로 표현
        return 'Vector({!r}, {!r})'.format(self.x, self.y)

    def __abs__(self):  
        return hypot(self.x, self.y)

    def __bool__(self):
        return bool(abs(self))

    def __add__(self, other):
        x = self.x + other.x
        y = self.y + other.y
        return Vector(x, y)

    def __mul__(self, scalar):
        return Vector(self.x * scalar, self.y * scalar)

    def __rmul__(self, scalar):  # scalar가 왼쪽에 오는 곱셈을 가능케 해줌
        return Vector(self.x * scalar, self.y * scalar)

>>> b = Vector(1,2)
>>> a = Vector(3,4)
>>> a+b
Vector(4, 6)
>>> a*3
Vector(9, 12)
>>> abs(a)
5.0
>>> bool(a)
True